实现首选写的 R/W 锁定



我有一个互斥锁库,正在尝试实现一个写偏好锁。 我正在看这个例子:

https://en.wikipedia.org/wiki/Readers%E2%80%93writer_lock

我理解读取首选锁,但我不理解写入首选锁。有人可以解释如何实现吗?

具体来说,我不明白这部分:

While w:
wait c, m

我也不明白标志w是通用的,还是每个进程的不同标志。我认为是前者。

例如,这里我们看到获取读锁定的算法:

Lock m (blocking).
While (w or r > 0):
wait c, m
Set w to true.
Unlock m.

但是wait c, m是什么意思? 这并不意味着等待锁定cm,因为我们已经在步骤1中锁定了m

而且,对于Set w to true- 这是否意味着必须在所有流程中将w设置为 true,或者仅在此流程中设置为真?

您的问题中引用的维基百科文章有一个下标注释,指出:

This is the standard "wait" operation on condition variables, which, among other actions, releases the mutex m.

条件变量函数的标准"等待"通常接受两个参数:条件变量和互斥锁。互斥锁m由"等待"函数释放,线程休眠,直到发出c信号。一旦发出信号并且线程继续,就会重新获取m锁(如果已在其他地方获取了锁,则可能需要等待c

将 (全局( 标志w设置为 true 表示写锁定当前由写入线程声明

。 只有当通过修改条件变量c、整数r(等待的读取器数量(、标志w(写入器等待(来协商设置或释放读/写状态的关键部分时,互斥m才会被锁定。

您发布的用于获取读锁(实际上是获得写锁,因此Set w to true(的伪代码同时使用互斥锁(m(和条件变量(c(。首先,它尝试在互斥m上实现独占锁,以便以原子方式修改相关输入。实现此目的后,它会调用wait c, mw(写锁定(或r(读取器等待(是否为非零。

总结一下:

  • "等待"函数接受两个参数:cm。它释放m并休眠,直到收到c信号。

  • 设置或释放读锁定或写锁定时,互斥锁m被锁定。

相关内容

  • 没有找到相关文章

最新更新