一种假想的锁定机制:非阻塞写入,读取和无效

时间:2017-06-02 09:42:27

标签: c++ multithreading lock-free

以下是该方案。鲍勃是作家,爱丽丝是读者。鲍勃写东西,爱丽丝读它们。规则是:

1)Bob可以写出Alice是否正在阅读(阅读不会阻止写入)。

2)当鲍勃写作时,爱丽丝无法阅读(写作会阻止读取)。

3)当Alice完成阅读时,她可以知道Bob在阅读期间是否写过(读者可以检测到他们刚刚阅读的数据是否无效)。

2)和3)实际上是一个组合规则,但我列出两个进行了很好的讨论。这个问题可以通过一个互斥锁和一个计数器(版本号)来解决,但我不知道的是,上面是一个众所周知的具有常用名称的场景吗?有没有研究过呢?

1 个答案:

答案 0 :(得分:3)

  

我不知道的是,问题是一个以术语命名的众所周知的场景吗?

是的,它被称为Seqlock: https://en.wikipedia.org/wiki/Seqlock

  

是否有人在研究它或我只是在制造一个轮子?

AFAIK有各种实现(如Linux内核)和论文。