我有一个带有指针接收器的方法,我想知道在此方法的goroutine内部使用此指针接收器是否安全?还是应该将此指针接收器作为参数传递?

例如:

func (m *dummyStruct) doSomething {
    /* do a bunch of stuff */
    go func() {
        m.a = x
        m.doSomethingElse()
    }()
    return y
}

我知道通过将m作为参数传递给goroutine不会出错,但是我想知道是否非常必要

最佳答案

如果要修改m的状态,则需要互斥锁和谨慎的锁定模式。

除此之外,在大多数情况下,这将增加跨线程边界的上下文切换。

这就是为什么我们有Go惯用法的原因:



https://blog.golang.org/share-memory-by-communicating

关于go - 在goroutine中使用指针接收器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39537728/

10-10 22:20