golang如何像c(gcc构建)一样实现同步、获取和添加?

golang如何像c(gcc构建)一样实现同步、获取和添加?,go,atomic,Go,Atomic,在go的sync/atomic库中,似乎没有像uu sync_fetch_和_addin c(gcc buildin)这样的函数,它有 等等 似乎我们只能通过比较ADSWAPxxx+while循环来实现它,是吗?从AddXXX返回值减去delta得到原始值。从AddXXX返回值减去delta得到原始值。从AddXXX返回值减去delta得到原始值。@CeriseLimón Woo,这很好!虽然它不是那么优雅。从AddXXX返回值中减去delta可以得到原始值。@CeriseLimón Woo,太

在go的sync/atomic库中,似乎没有像uu sync_fetch_和_addin c(gcc buildin)这样的函数,它有

等等


似乎我们只能通过
比较ADSWAPxxx+while循环来实现它,是吗?

从AddXXX返回值减去delta得到原始值。

从AddXXX返回值减去delta得到原始值。

从AddXXX返回值减去delta得到原始值。@CeriseLimón Woo,这很好!虽然它不是那么优雅。从AddXXX返回值中减去delta可以得到原始值。@CeriseLimón Woo,太好了!虽然它不是那么优雅。我认为
ori=atomic.AddUint32(&avalue,1)-1
有点优雅;-)我认为
ori=atomic.AddUint32(&avalue,1)-1
有点优雅;-)
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)
...