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

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

在 go build 中使用 '-race' 標志時發生了什么

在 go build 中使用 '-race' 標志時發生了什么

Go
倚天杖 2022-08-15 10:23:52
我對下面的代碼感到困惑,與,會改變程序行為有什么區別嗎?go run go run -race-race// test.gopackage mainimport "fmt"func main() {    c := make(chan string)    go func() {        for i := 0; i < 2; i++ {            c <- "hello there"        }    }()    for msg := range c {        fmt.Println(msg)    }}當 時,結果為:go run test.gohello therehello therefatal error: all goroutines are asleep - deadlock!goroutine 1 [chan receive]:main.main()        /Users/donghui6/go/src/jd.com/iaas-sre/test/test.go:14 +0xf4exit status 2當 時,程序將掛起,如下所示:go run -race test.gohello therehello there所以,誰能告訴我使用標志時發生了什么-race
查看完整描述

1 回答

?
素胚勾勒不出你

TA貢獻1827條經驗 獲得超9個贊

在 Go Build 中使用 '-race' 標志時會發生什么

然后,在啟用所謂的“比賽檢測器”的情況下構建程序。數據競賽是一種編程錯誤,任何具有數據競賽的程序都是無效的,其行為是未定義的。切勿使用數據競跑編寫代碼。

數據競賽是指兩個或多個 goroutine 在沒有正確同步的情況下讀取和寫入同一內存。數據競賽時有發生,但這是程序員的一個主要錯誤。

競速檢測器檢測到對同一存儲器的未同步讀/寫,并將其報告為故障(確實如此)。請注意,如果 race 檢測器檢測到數據競跑,即使它在沒有 -race 的情況下“正?!边\行,您的代碼是錯誤的。

競態檢測器并不總是打開,因為檢測數據競跑會大大減慢執行速度。


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

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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