第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

Go 內(nèi)存模型發(fā)生在之前(具有共享狀態(tài)的通道)

Go 內(nèi)存模型發(fā)生在之前(具有共享狀態(tài)的通道)

Go
POPMUISE 2023-07-26 17:18:19
我試圖更全面地理解通道和其他共享狀態(tài)之間發(fā)生之前關(guān)系的本質(zhì)。具體來說,我想看看是否在通道發(fā)送和接收操作上創(chuàng)建了某種內(nèi)存圍欄。例如,如果我在通道上發(fā)送消息,則圍繞共享狀態(tài)修改的所有其他操作都“發(fā)生在”發(fā)送/接收操作之前。在我的特定示例中,我只從單個 go 例程寫入,然后從單個 go 例程讀取。(旁白:下面示例中明顯的答案是直接將結(jié)構(gòu)體的實例放在Person通道上,但這不是我要問的。)package mainfunc main() {    channel := make(chan int, 128)    go func() {        person := &sharedState[0]        person.Name = "Hello, World!"        channel <- 0    }()    index := <-channel    person := sharedState[index]    if person.Name != "Hello, World!" {        // unintended race condition    }}type Person struct{ Name string }var sharedState = make([]Person, 1024)
查看完整描述

1 回答

?
嚕嚕噠

TA貢獻(xiàn)1784條經(jīng)驗 獲得超7個贊

內(nèi)存模型保證當(dāng)通道寫操作執(zhí)行時,該 goroutine 中在通道操作之前的所有操作都是可見的。因此,在您的示例中,“意外的競爭條件”不會發(fā)生,因為當(dāng)讀取通道時,goroutine 中發(fā)生的分配是可見的。當(dāng)然,這是假設(shè)沒有另一個 goroutine 正在寫入同一個變量。如果有另一個 goroutine 寫入同一個變量,那么您也需要同步該 goroutine 以避免競爭。



查看完整回答
反對 回復(fù) 2023-07-26
  • 1 回答
  • 0 關(guān)注
  • 138 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號