为了账号安全,请及时绑定邮箱和手机立即绑定

我应该用互斥量保护结构对象吗?

我应该用互斥量保护结构对象吗?

Go
慕妹3242003 2023-06-19 16:54:33
我使用 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 正在访问四个独立的(子)变量,因此即使没有互斥量,也不存在数据竞争。

查看完整回答
反对 回复 2023-06-19
  • 1 回答
  • 0 关注
  • 92 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信