39、互斥锁
00 分钟
2022-8-26
在前面的例子中,我们看到了如何使用原子操作(atomic-counters)来管理简单的计数器。对于更加复杂的情况,我们可以使用一个互斥量来在Go协程间安全的访问数据。
 
 
 
 
 
Container中定义了counters的map ,由于我们希望从多个goroutine 同时更新它,因此我们添加了一个互斥锁 Mutex 来同步访问。请注意不能复制互斥锁,如果需要传递这个 struct ,应使用指针完成。
 
 
在访问 counters之前锁定互斥Sun;使用[defer](defer)在函数结束时解锁。
 
 
 
请注意,互斥量的零值是可用的,因此这里了不需要初始化。
 
 
这个函数在循环中递增对那么的计数
 
 
 
 
同时运行多个goroutines;请注意,他们都访问相同的Container,其中两个访问相同的计数器
 
等待上面的goroutines都执行结束
 
 
 
运行这个程序显示计数器更新和我们期望的一致
 
上一篇:
38、原子计数器
下一篇:
40、状态协程

评论