为什么“RLock”在Golang是必要的?

zd287kbt  于 2023-09-28  发布在  Go
关注(0)|答案(1)|浏览(135)

在我第一眼看到Go中的sync.RWMutex时,RLock是不必要的:可以仅仅将关键块视为顺序代码。
RLock背后的原因是什么?我在doc中看到以下内容:
在Go内存模型的术语中,对于任何n < m,对Unlock的第n次调用“同步”在对Lock的第m次调用之前,就像对Mutex一样。对于对RLock的任何调用,存在n,使得对Unlock的第n调用在对RLock的该调用之前“同步”,并且对RUnlock的对应调用在对Lock的第n+1调用之前“同步”。
谁能给我详细解释一下这件事?

sy5wg1nm

sy5wg1nm1#

文档解释了RWMutex的用途:
锁可以由任意数量的读取器或单个写入器来保持。
RLock和ROUnlock方法对于区分锁定互斥体以供读取的调用者和锁定互斥体以供写入的调用者是必要的。

相关问题