Kee*_*eto 5 concurrency go goroutine
我有一个带指针接收器的方法,我想知道在这个方法中使用这个指针接收器是否可以安全地在goroutine中使用?或者我应该将此指针接收器作为参数传递?
例如:
func (m *dummyStruct) doSomething {
/* do a bunch of stuff */
go func() {
m.a = x
m.doSomethingElse()
}()
return y
}
Run Code Online (Sandbox Code Playgroud)
我知道通过将m作为参数传递给goroutine我不会出错,但我想知道是否非常必要
如果要修改状态m,则需要使用互斥锁和小心锁定模式.
除此之外,在大多数情况下,这将增加跨线程边界的上下文切换.
这就是为什么我们有Go成语:
不要通过共享内存进行通信; 相反,通过沟通分享记忆.
https://blog.golang.org/share-memory-by-communicating