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

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

在沒有通道的 goroutine 中安全地從共享數據結構中讀取

在沒有通道的 goroutine 中安全地從共享數據結構中讀取

Go
ITMISS 2022-07-11 14:41:50
我是 Golang 的新手,開始使用 goroutines。我很好奇在不使用通道或互斥鎖的情況下從另一個 goroutine 寫入的數據結構中讀取是否安全。在下面的示例中,events數組對 main 和 goroutine 可見,但 main 只讀取它,而 goroutine 正在修改它。這被認為是安全的嗎?var events = []string{}func main() {    go func() {        for {            if len(events) > 30 {                events = nil            }            event := "The time is now " + time.Now().String()            events = append(events, event)            time.Sleep(time.Millisecond * 200)        }    }()    for {        for i:=0; i < len(events); i++ {            fmt.Println(events[i])        }        time.Sleep(time.Millisecond * 100)        fmt.Println("--------------------------------------------------------")    }}
查看完整描述

1 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

不,這絕對不安全。您應該圍繞訪問使用同步原語events,或重新設計以使用通道。

您的代碼今天在特定架構/操作系統上可能運行良好,但它可能會因微小的更改和/或在另一個架構/操作系統上而意外中斷。

嘗試運行您的代碼以-race進行驗證。你可能會看到WARNING: DATA RACE。

另請參閱此答案。


查看完整回答
反對 回復 2022-07-11
  • 1 回答
  • 0 關注
  • 90 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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