我使用 4 個 go 例程來分配結(jié)構(gòu)實(shí)例的不同成員變量。每個成員變量只能由一個 go routine 訪問。訪問struct實(shí)例時是否需要加mutex?我不確定這 4 個 go 例程是否訪問相同的內(nèi)存。我覺得我應(yīng)該是因?yàn)樗麄兯腥硕伎梢栽L問持有人。這段代碼演示了我在做什么。package mainimport ( "fmt" "sync")func main() { var wg sync.WaitGroup var res Response var mu sync.Mutex wg.Add(1) go func() { defer wg.Done() mu.Lock() defer mu.Unlock() res.A = []string{"a"} }() wg.Add(1) go func() { defer wg.Done() mu.Lock() defer mu.Unlock() res.B = "b" }() wg.Add(1) go func() { defer wg.Done() mu.Lock() defer mu.Unlock() res.C = 100 }() wg.Add(1) go func() { defer wg.Done() mu.Lock() defer mu.Unlock() res.D = map[string]string{ "d": "dd", } }() wg.Wait() fmt.Println(res)}type Response struct { A []string B string C int D map[string]string}
1 回答

翻過高山走不出你
TA貢獻(xiàn)1875條經(jīng)驗(yàn) 獲得超3個贊
您不需要此程序的互斥量。就 Go 內(nèi)存模型而言,結(jié)構(gòu)的單獨(dú)字段是單獨(dú)的變量。由于四個 goroutine 正在訪問四個獨(dú)立的(子)變量,因此即使沒有互斥量,也不存在數(shù)據(jù)競爭。
- 1 回答
- 0 關(guān)注
- 134 瀏覽
添加回答
舉報
0/150
提交
取消