亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

golang 中 uint8 的讀寫是原子的嗎?

golang 中 uint8 的讀寫是原子的嗎?

Go
Smart貓小萌 2021-12-27 15:19:07
和標題一樣,uint8 的讀寫操作是原子的嗎?從邏輯上講,讀取和寫入 8 位變量顯然必須是單個 cpu 指令。但是無論如何,兩個內核可以同時從內存中讀取和寫入,是否可以通過這種方式創建陳舊數據?
查看完整描述

2 回答

?
慕碼人8056858

TA貢獻1803條經驗 獲得超6個贊

不能保證對本機類型的訪問在任何平臺原子上。這就是為什么有sync/atomic. 另請參閱內存模型文檔中的建議。


以原子方式設置值的通用方法示例 ( Play )


var ax atomic.Value // may be globally accessible


x := uint8(5)


// set atomically

ax.Store(x)


x = ax.Load().(uint8)

uint8( Play )可能更有效的解決方案:


var ax int64 // may be globally accessible


x := uint8(5)


atomic.StoreInt64(&ax, 10)


x = uint8(atomic.LoadInt64(&ax))


fmt.Printf("%T %v\n", x, x)


查看完整回答
反對 回復 2021-12-27
?
慕姐8265434

TA貢獻1813條經驗 獲得超2個贊

不。如果你想要原子操作,你可以使用這個sync/atomic包。

如果您的意思是“即使我忽略 Go內存模型,8 位操作也會是原子的嗎?”,那么答案仍然是,這取決于可能不是。

如果硬件保證讀/寫操作的原子性,那么它可能是原子的。但這仍然不能保證緩存一致性,或重新排序操作的編譯器優化。您需要以某種方式序列化操作,使用 Go 在“atomic”包中提供的原語,并使用“sync”包和通道在 goroutine 之間進行協調。


查看完整回答
反對 回復 2021-12-27
  • 2 回答
  • 0 關注
  • 364 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號