我需要一个函数来在 Go 中原子地添加 float32 值。这是基于我发现的一些 C 代码提出的:package atomicimport ( "sync/atomic" "unsafe" "math")func AddFloat32(addr *float32, delta float32) (new float32) { unsafeAddr := (*uint32)(unsafe.Pointer(addr)) for { oldValue := math.Float32bits(*addr) new = *addr + delta newValue := math.Float32bits(new) if atomic.CompareAndSwapUint32(unsafeAddr, oldValue, newValue) { return } }}它应该工作(即真的是原子的)吗?在 Go 中有更好/更快的方法吗?
1 回答
- 1 回答
- 0 关注
- 153 浏览
添加回答
举报
0/150
提交
取消