我使用 4 个 go 例程来分配结构实例的不同成员变量。每个成员变量只能由一个 go routine 访问。访问struct实例时是否需要加mutex?我不确定这 4 个 go 例程是否访问相同的内存。我觉得我应该是因为他们所有人都可以访问持有人。这段代码演示了我在做什么。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贡献1875条经验 获得超3个赞
您不需要此程序的互斥量。就 Go 内存模型而言,结构的单独字段是单独的变量。由于四个 goroutine 正在访问四个独立的(子)变量,因此即使没有互斥量,也不存在数据竞争。
- 1 回答
- 0 关注
- 92 浏览
添加回答
举报
0/150
提交
取消