我使用 4 个 go 例程来分配结构实例的不同成员变量。每个成员变量只能由一个 go routine 访问。
访问struct实例时是否需要加mutex?
我不确定这 4 个 go 例程是否访问相同的内存。我觉得我应该是因为他们所有人都可以访问持有人。
这段代码演示了我在做什么。
package main
import (
"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
}
翻过高山走不出你
相关分类