Eon*_*nil 4 closures capture thread-safety go
我刚观察并确认Go闭包通过引用捕获外部变量.如果将变量捕获到Goroutine中并且如果Goroutine复用到不同的线程中,
正如您所注意到的,Go会通过引用在闭包中捕获外部变量.
修改闭包中的值是否安全?
它是一个变量,就像任何其他变量一样,所以相同的规则适用于普通的Go代码.修改它是安全的,但如果你同时修改它,那么你需要提供自己的锁或使用原子类型.
有关完整详细信息,请参阅Go Memory模型.
如果它不安全,为什么不去防止这个?
它与访问go例程之间共享的任何其他变量没有什么不同.你可以安全地做到这一点你可以做得不安全 - 如果你愿意,Go可让你自由地射击自己!
Go有一个出色的竞赛检测器,虽然可以找到并发的变量访问问题.
还是采用了一些安全机械?(如锁)
不,Go永远不会为您锁定东西 - 您需要使用同步包中提供的原语,或遵循Go的理念,即不通过共享内存进行通信; 相反,通过通信共享内存,即使用通道在go例程之间说话.
| 归档时间: |
|
| 查看次数: |
738 次 |
| 最近记录: |