go RWMutex源码解析

2020-08-11  本文已影响0人  竹羔
RWMutex

基于go 1.13源码
总的来说读写锁就是利用互斥锁和CAS维护2个关于读锁的变量以及runtime的2个信号量,来实现「当存在读锁时,读操作可以继续加锁,写操作会堵塞;当存在写锁时,读/写操作均会堵塞」的机制。
下面是具体分析,略去竞态分析和runtime的信号量P/V操作的代码。

结构
type RWMutex struct {
    w           Mutex  // held if there are pending writers
    writerSem   uint32 // semaphore for writers to wait for completing readers
    readerSem   uint32 // semaphore for readers to wait for completing writers
    readerCount int32  // number of pending readers
    readerWait  int32  // number of departing readers
}
方法
参考

https://github.com/cch123/golang-notes/blob/master/sync.md

上一篇 下一篇

猜你喜欢

热点阅读