Go race condition以及解決方法

2021-08-30 17:40:21 字數 1352 閱讀 3937

一般情況下是由於在沒有加鎖的情況下多個協程進行操作對同乙個變數操作形成競爭條件.

如果沒有鎖的情況會輸出結果非1001.

func

main()

times :=

1000

for i:=

0; i< times; i++()

} g.

wait()

fmt.

println

(c)}

多核cpu操作同一變數,可能會取到』舊』的值,是乙個併發導致的錯誤.

對專案執行競爭檢測:

$ go test -race mypkg    // test the package

$ go run -race mysrc.go // compile and run the program

$ go build -race mycmd // build the command

$ go install -race mypkg // install the package

可以輕鬆的看到問題**:

$ go run -race mtest.go

***************===

warning: data race

read at 0x00c0420080e0 by goroutine 7:

main.main.func1()

c:/users/liuzexin/go/src/gotest/mtest.go:65 +0x42

previous write at 0x00c0420080e0 by goroutine 6:

main.main.func1()

c:/users/liuzexin/go/src/gotest/mtest.go:65 +0x5b

goroutine 7 (running) created at:

main.main()

c:/users/liuzexin/go/src/gotest/mtest.go:63 +0xec

goroutine 6 (finished) created at:

main.main()

c:/users/liuzexin/go/src/gotest/mtest.go:63 +0xec

***************===

989found 1 data race(s)

exit status 66

方式1:使用互斥鎖sync.mutex

方式2:使用管道

使用管道的效率要比互斥鎖高,也符合go語言的設計思想.

mysql註冊以及安裝之後無法連線解決方法

mysql在cmd無法連線,解決如下 1.停止服務,cmd net stop mysql 或者 services.msc 找到mysql服務,關閉即可。2.在mysql安裝路徑中,c program files x86 mysql mysql server 5.5,找到my.ini配置檔案,在最後一...

Layout天線效應的產生原因以及解決方法

使用的是tsmc65nm的工藝,過drc時遇到天線效應報錯a.r.6,查詢工藝手冊並沒有找到什麼解決方法。然後正好上週日開組會的時候吳老師提到了天線效應的來歷,所以上網找了找資料。決定寫下這篇文章記錄一下。天線效應的產生粗略的講就是加工過程中有可能會導致金屬表面積累的電荷過多,但又無法形成對地的放電...

MySQL慢SQL語句常見誘因以及解決方法

1.無索引 索引失效導致慢查詢 如果在一張幾千萬資料的表中以乙個沒有索引的列作為查詢條件,程式設計客棧大部分情況下查詢會非常耗時,這種查詢毫無疑問是乙個慢sql查詢。所以對於大資料量的查詢,需要建立適合的索引來優化查詢。雖然很多時候建立了索引,但在一些特定的場景下,索引還有可能會失效,所以索引失效也...