gpt4 book ai didi

locking - 实现写优先 R/W 锁

转载 作者:行者123 更新时间:2023-12-01 04:39:13 26 4
gpt4 key购买 nike

我有一个互斥体库,并且正在尝试实现一个写优先锁。
我正在看这个例子:

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意思?
这并不意味着等待获得两个 c 的锁定和 m , 因为我们已经锁定 m在步骤 1 中。

而且,对于 Set w to true - 这是否意味着 w必须在所有进程中设置为 true 还是仅在这个进程中设置?

最佳答案

您的问题中引用的维基百科文章has a subscript note指出:
This is the standard "wait" operation on condition variables, which, among other actions, releases the mutex m.
Standard "wait"条件变量函数通常接受两个参数:条件变量和互斥锁。互斥锁 m由“等待”函数和 thread sleeps until c is signaled 释放. m重新获取锁(如果在其他地方获取了锁,则可能需要等待)一次 c发出信号,线程继续。

设置(全局)标志 w为 true 表示写锁当前被写线程声明。

互斥锁 m仅在协商 critical section 时被锁定通过修改条件变量来设置或释放读/写状态c , 整数 r (等待的读者数量),标志 w (作者等待)。

您发布的用于获取读锁(实际上是获得写锁,因此 Set w to true )的伪代码同时使用了互斥锁( m )和 conditional variable ( c )。首先,它尝试在互斥锁 m 上获得排他锁。为了以原子方式修改相关输入。一旦实现,它会调用 wait c, m如果 w (写锁)或 r (读者等待)非零。

总结一下:

  • “等待”函数接受两个参数:cm .它发布 m并休眠直到在 c 上接收到信号.
  • 互斥锁 m设置或释放读或写锁定时被锁定。
  • 关于locking - 实现写优先 R/W 锁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51110130/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com