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

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

為什么會有數據競爭

為什么會有數據競爭

Go
慕俠2389804 2023-02-06 11:23:49
我正在閱讀 Dave Cheney 的帖子https://dave.cheney.net/2015/11/18/wednesday-pop-quiz-spot-the-race,但無法理解為什么該示例包含數據競爭。有人可以向我解釋嗎?
查看完整描述

1 回答

?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

這是博客文章中的相關代碼:


func (rpc *RPC) compute() {

    time.Sleep(time.Second)

    rpc.result = 42   /* W */

    close(rpc.done)

}


func (RPC) version() int {

    return 1

}


?

go rpc.compute()         

version := rpc.version() /* R */

<-rpc.done              

goroutinerpc.result在由 標記的行修改調用者的字段/* W */。這是容易理解的部分。


注釋行中的方法調用/* R */是 的語法糖(*rpc).version()。接收者值在方法調用時被復制,包括result字段。讀取與寫入并發,/* W */因此是數據競爭。雖然程序沒有對復制的result字段做任何事情,但它仍然是一場數據競賽。


version()通過更改使用指針接收器的方法來修復:


func (*RPC) version() int {

    return 1

}


查看完整回答
反對 回復 2023-02-06
  • 1 回答
  • 0 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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