转到 atomic.AddFloat32()

我需要一个函数来在 Go 中原子地添加 float32 值。这是基于我发现的一些 C 代码提出的:


package atomic


import (

    "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 中有更好/更快的方法吗?


蓝山帝景
浏览 154回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go