Golang 读写锁的特点​

sync.RWMutex
  1. 允许多个 goroutine 同时读取共享资源,但只允许一个 goroutine 写入共享资源。
  2. 当有一个 goroutine 写入共享资源时,所有其他 goroutine(包括读取和写入)都被阻塞,直到写入完成。
  3. 当有一个 goroutine 读取共享资源时,其他读取的 goroutine 仍然可以继续读取,但不能进行写入。

底层实现结构​

sync.RWMutexsrc/sync/rwmutex.go
wsync.MutexreaderSemsync.Cond

读写锁的实现原理​

w
wreaderSem
w
readerSem

如果该计数器变为 0,而且没有其他 goroutine 正在等待写入锁,则它会释放写入锁,允许等待写入锁的 goroutine 获取它。

这种实现方式允许多个 goroutine 同时读取共享资源,提高了并发性能,但同时保证了对共享资源的写入操作是互斥的,确保数据的一致性和可靠性。