sync.Mutex
我们已经看到,通道非常适合用于 goroutines 之间的通信。
但如果我们并不需要通信呢?如果我们只是想确保每次只有
一个 goroutine 能访问某个变量,从而避免冲突呢?
这个概念称为 互斥,而提供这种机制的数据结构通常称为 互斥锁。
Go 的标准库通过
sync.Mutex 及其两个方法提供互斥机制:
通过在代码块前后分别调用 Lock 和 Unlock,就可以让它以互斥方式执行,正如 Inc 方法所示。
我们还可以使用 defer 来确保互斥锁最终会被解锁,如 Value 方法所示。