go获取协程(goroutine)号的实例
以下代码就会出现竞争状态:count 变量没有任何同步保护,所以两个 goroutine 都会对其进行读写,会导致对已经计算好的结果被覆盖,以至于产生错误结果。通过上面的分析可以看出,之所以出现上面的问题,是因为两个 goroutine 相互覆盖结果。所以我们对于同一个资源的读写必须是原子化的,也就是说,同一时间只能允许有一个 goroutine 对共享资源进行读写操作。另外两个有用的原子函数是 LoadInt64 和 StoreInt64。如果哪个 doWork goroutine 试图在 main 函数调用 StoreInt64 的同时调用 LoadInt64 函数,那么原子函数会将这些调用互相同步,保证这些操作都是安全的,不会进入竞争状态。见上篇文章,上面的例子为保持同步,取消竞争,可照以下操作:统统将通道两端的goroutine理解为生产者-消费者模式。
下载地址
用户评论