和标题一样,uint8 的读写操作是原子的吗?从逻辑上讲,读取和写入 8 位变量显然必须是单个 cpu 指令。但是无论如何,两个内核可以同时从内存中读取和写入,是否可以通过这种方式创建陈旧数据?
Smart猫小萌
浏览 421回答 2
2回答
慕码人8056858
不能保证对本机类型的访问在任何平台原子上。这就是为什么有sync/atomic. 另请参阅内存模型文档中的建议。以原子方式设置值的通用方法示例 ( Play )var ax atomic.Value // may be globally accessiblex := uint8(5)// set atomicallyax.Store(x)x = ax.Load().(uint8)uint8( Play )可能更有效的解决方案:var ax int64 // may be globally accessiblex := uint8(5)atomic.StoreInt64(&ax, 10)x = uint8(atomic.LoadInt64(&ax))fmt.Printf("%T %v\n", x, x)