首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实现写优先R/W锁

问实现写优先R/W锁
EN

Stack Overflow用户
提问于 2018-06-29 22:28:27
回答 1查看 974关注 0票数 5

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

锁定

我理解读优先锁,但我不理解写优先锁。有人能解释一下如何实现吗?

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

代码语言:javascript
复制
While w:
  wait c, m

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

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

代码语言:javascript
复制
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?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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被锁定.
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51110130

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档