Go Sync Rwmutex
关于 sync.RWMutex,Lock() 优先级高于 RLock(),简单介绍下几个方法的功能。
Lock() 会:
- 获取锁,阻塞其他将要调用
Lock()的协程; - 阻塞将要调用
RLock()的协程(将 readerCount 设置为负数); - 等待已经调用
RLock()的协程,直到所有RUnlock()被调用;
Unlock() 会:
- 释放被阻塞的
RLock()(恢复 readerCount 为正数); - 释放其他的
Lock(),如果有;
RLock() 会:
- 增加 readerCount
- 如果有writer,则等待 writer 写入完成
RUnlock() 会:
- 降低 readerCount
- 如果有 writer 在等待 (readerCount < 0)
- 2.a 如果当前 reader 是最后一个 reader,则释放信号量
- 2.b 如果当前 reader 不是最后一个reader,则只是降低 readerWait