Go Mutex 的基本用法
Mutex 我们一般只会用到它的两个方法:
Lock:获取互斥锁。(只会有一个协程可以获取到锁,通常用在临界区开始的地方。)Unlock: 释放互斥锁。(释放获取到的锁,通常用在临界区结束的地方。)
Mutex 的模型可以用下图表示:

说明:
- 同一时刻只能有一个协程获取到
Mutex的使用权,其他协程需要排队等待(也就是上图的G1->G2->Gn)。 - 拥有锁的协程从临界区退出的时候需要使用
Unlock来释放锁,这个时候等待队列的下一个协程可以获取到锁(实际实现比这里说的复杂很多,后面会细说),从而进入临界区。 - 等待的协程会在
Lock调用处阻塞,Unlock的时候会使得一个等待的协程解除阻塞的状态,得以继续执行。

本文详细介绍了Go的Mutex,包括基本用法、原子操作、状态解析和常见使用注意事项。重点讨论了Mutex如何保证同步、避免并发问题以及避免死锁的方法,并提供了锁竞争的判断与解决方案。同时提醒读者Mutex不应被复制,以防止潜在的死锁风险。
557

被折叠的 条评论
为什么被折叠?



