當前位置:編程學習大全網 - 網站源碼 - 如何證明 go map 不是並發安全的

如何證明 go map 不是並發安全的

試試下面這段代碼:

package main

import "fmt"

func main() {

c := make(map[string]int)

for i := 0; i < 100; i++ {

go func() {

for j := 0; j < 1000000; j++ {

c[fmt.Sprintf("%d", j)] = j

}

}()

}

}

這段代碼就很容易崩潰了。

為什麽妳的代碼沒有崩潰呢?妳雖然開了100個goroutine,跑了100次,但妳始終是訪問了同樣的壹個key-value:ceshi->1。結果就是map內部的數據結構基本上不會有變化。還有,100次觸發這個bug的機率還不是足夠大。

真實環境中這麽用,壹定會崩潰,只是妳不知道什麽時間會崩潰。寫測試也壹般都會通過。

  • 上一篇:c#控件運行時怎麽無限添加小控件
  • 下一篇:appium python怎麽實現按鍵
  • copyright 2024編程學習大全網