我有一个互斥库,并且正在尝试实现一个写优先锁.我正在看这个例子:
我理解读优先锁,但我不理解写优先锁。有人能解释一下如何实现吗?
具体来说,我不明白这部分:
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,还是仅在此过程中设置为true?
发布于 2018-07-10 03:13:44
您的问题有下标音符中引用的维基百科文章指出:
This is the standard "wait" operation on condition variables, which, among other actions, releases the mutex m.
条件变量函数的标准“等待”通常接受两个参数:一个条件变量和一个互斥变量。互斥m由“等待”函数和发出信号释放。m锁是重新获得的(如果在其他地方获得了锁,这可能需要等待),一旦c被发送信号,线程就会继续执行。
将(全局)标志w设置为true表示写锁当前由写线程声明。
Mutex m仅在协商设置或释放读/写状态的临界截面时才被锁定,方法是修改条件变量c、整数r (等待读取器的数量)、标志w (写器等待)。
您为获取读锁而发布的伪代码(实际上是获得写锁,因此Set w to true)同时使用互斥锁(m)和条件变量 (c)。首先,它试图获得互斥m上的独占锁,以便以原子方式修改相关输入。一旦实现了这一点,如果wait c, m (写锁)或r (等待读取器)为非零,则调用r。
概括地说:
c和m。它释放m并睡觉,直到在c上接收到信号。m被锁定.https://stackoverflow.com/questions/51110130
复制相似问题