实现写优先 R/W 锁
Implementing write-preferring R/W lock
我有一个互斥库,正在尝试实现写优先锁。
我正在看这个例子:
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
,因为我们已经在步骤 1 中锁定了 m
。
此外,对于 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" on conditional variable functions typically accept two parameters: a conditional variable and a mutex. The mutex m
is released by the "wait" function and the thread sleeps until c
is signaled。一旦 c
发出信号并且线程继续,就会重新获取 m
锁(如果已在其他地方获取锁,则可能需要等待)。
将(全局)标志 w
设置为 true 表示写入线程当前正在声明写入锁。
互斥体m
仅在通过修改条件变量c
、整数r
(数字)协商设置或释放read/write状态的critical section时被锁定读者等待),标志 w
(作者等待)。
您发布的用于获取读锁(实际上是获取写锁,因此 Set w to true
)的伪代码同时使用互斥锁 (m
) 和 conditional variable(c
)。首先,它试图获得对互斥量 m
的独占锁定,以便以原子方式修改相关输入。一旦实现,如果 w
(写锁)或 r
(等待读者)非零,它会调用 wait c, m
。
总结一下:
"wait" 函数接受两个参数:c
和 m
。它释放 m
并休眠,直到在 c
.
上收到信号
当设置或释放读锁或写锁时,互斥量 m
被锁定。
我有一个互斥库,正在尝试实现写优先锁。 我正在看这个例子:
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
,因为我们已经在步骤 1 中锁定了 m
。
此外,对于 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" on conditional variable functions typically accept two parameters: a conditional variable and a mutex. The mutex m
is released by the "wait" function and the thread sleeps until c
is signaled。一旦 c
发出信号并且线程继续,就会重新获取 m
锁(如果已在其他地方获取锁,则可能需要等待)。
将(全局)标志 w
设置为 true 表示写入线程当前正在声明写入锁。
互斥体m
仅在通过修改条件变量c
、整数r
(数字)协商设置或释放read/write状态的critical section时被锁定读者等待),标志 w
(作者等待)。
您发布的用于获取读锁(实际上是获取写锁,因此 Set w to true
)的伪代码同时使用互斥锁 (m
) 和 conditional variable(c
)。首先,它试图获得对互斥量 m
的独占锁定,以便以原子方式修改相关输入。一旦实现,如果 w
(写锁)或 r
(等待读者)非零,它会调用 wait c, m
。
总结一下:
"wait" 函数接受两个参数:
c
和m
。它释放m
并休眠,直到在c
. 上收到信号
当设置或释放读锁或写锁时,互斥量
m
被锁定。