【发布时间】:2020-04-11 08:13:40
【问题描述】:
我有一个结构,其中包含几个简单的字段(即:int、string 和 []byte)。
我还有几个 goroutine 可以修改结构中的不同字段。但是每个 goroutine 都会修改自己的字段。
我没有注意到任何竞争条件的问题或提示。然后我相当轻松地将sync.Mutex 添加到代码中,并且代码运行完全相同。
但根据我的阅读,似乎有些人可能会建议在这种情况下使用 sync.Mutex。是否需要,即使程序运行没有错误?
【问题讨论】:
-
您可以使用
-race标志构建/测试您的程序以检测数据竞争。 golang.org/cmd/go/#hdr-Compile_packages_and_dependencies -
问题是是否有任何 goroutine 同时读取任何正在修改的字段。如果是,你需要一个互斥体,否则你不需要。