Go并发编程实战课笔记—Mutex
Go并发编程实战课笔记—Mutex
以下为鸟窝大佬的Go 并发编程实战课 中摘录的笔记
方法),能够发现死锁的goroutine。
vet工具可以检查同步原语。也可以使用第三方库进行检查。
重入
可重入锁(递归锁):当一个线程获取锁时,如果没有其它线程拥有这个锁,那么,这个线程就成功获取到这个锁。之后,如果其它线程再请求这个锁,就会处于阻塞等待的状态。但是,如果拥有这把锁的线程再请求这把锁的话,不会阻塞,而是成功返回。
在通过递归实现一些算法时,调用者不会阻塞或者死锁。
Mutex不是可重入锁。Mutex实现没有记录goroutine是否拥有该锁。
若要实现可重入锁,则需要记录持有该锁的goroutine标识。
死锁
死锁:两个及以上的进程或线程在执行过程中,因争夺共享资源而处于一种互相等待的状态,若无外部干涉则会无法推进下去。
- 可引入第三方的锁来依赖这个锁进行业务处理,避免出现死锁。