golang如何实现像c(gcc buildin)一样的__sync_fetch_and_add?
How can golang implement __sync_fetch_and_add like c(gcc buildin)?
在go的sync/atomic库中,c(gcc buildin)中似乎没有__sync_fetch_and_add这样的函数,它有
func AddInt32(addr *int32, delta int32) (new int32)
func AddInt64(addr *int64, delta int64) (new int64)
func AddUint32(addr *uint32, delta uint32) (new uint32)
func AddUint64(addr *uint64, delta uint64) (new uint64)
func AddUintptr(addr *uintptr, delta uintptr) (new uintptr)
func CompareAndSwapInt32(addr *int32, old, new int32) (swapped bool)
func CompareAndSwapInt64(addr *int64, old, new int64) (swapped bool)
...
等等
好像只有CompareAndSwapxxx + while-loop
才能实现,是吗?
从 AddXXX return 值中减去增量以获得原始值。
在go的sync/atomic库中,c(gcc buildin)中似乎没有__sync_fetch_and_add这样的函数,它有
func AddInt32(addr *int32, delta int32) (new int32)
func AddInt64(addr *int64, delta int64) (new int64)
func AddUint32(addr *uint32, delta uint32) (new uint32)
func AddUint64(addr *uint64, delta uint64) (new uint64)
func AddUintptr(addr *uintptr, delta uintptr) (new uintptr)
func CompareAndSwapInt32(addr *int32, old, new int32) (swapped bool)
func CompareAndSwapInt64(addr *int64, old, new int64) (swapped bool)
...
等等
好像只有CompareAndSwapxxx + while-loop
才能实现,是吗?
从 AddXXX return 值中减去增量以获得原始值。