Golang 读写锁的特点
sync.RWMutex- 允许多个 goroutine 同时读取共享资源,但只允许一个 goroutine 写入共享资源。
- 当有一个 goroutine 写入共享资源时,所有其他 goroutine(包括读取和写入)都被阻塞,直到写入完成。
- 当有一个 goroutine 读取共享资源时,其他读取的 goroutine 仍然可以继续读取,但不能进行写入。
底层实现结构
sync.RWMutexsrc/sync/rwmutex.gowsync.MutexreaderSemsync.Cond读写锁的实现原理
wwreaderSemwreaderSem如果该计数器变为 0,而且没有其他 goroutine 正在等待写入锁,则它会释放写入锁,允许等待写入锁的 goroutine 获取它。
这种实现方式允许多个 goroutine 同时读取共享资源,提高了并发性能,但同时保证了对共享资源的写入操作是互斥的,确保数据的一致性和可靠性。