Fober等人的无锁FIFO队列:多个消费者和生产者?

时间:2010-06-05 04:32:29

标签: c++ queue lock-free fifo

我想知道在Fober等人的论文http://nedko.arnaudov.name/soft/L17_Fober.pdf中呈现的fifo队列是否是多个消费者并且产生了fifo队列。如果不是,哪个是最好记录的多个消费者和生产者FIFO队列?

由于

3 个答案:

答案 0 :(得分:1)

我还没有看过论文,但我在这里做了一个很大的假设:本文使用CAS(比较和交换)技术来实现并发。

免费锁定并不意味着无阻塞。 CAS的使用将阻止其他线程,但至少有一个线程将始终“向前”移动。

多个生产者都写入同一个队列 - 这不是问题。棘手的是多个消费者。如果每个消费者必须访问数据,那么我将通过多个队列实现该数据,并且数据在一个处理后将落入下一个队列。如果你的意思是通过线程的多个消费者,那么这将适用于上述方法

答案 1 :(得分:1)

是肯定的。阅读章节'3.1线性化' pop操作假定可能发生并发的dequeue。这意味着多个线程将能够使用队列。

答案 2 :(得分:0)

我不知道“Fober队列”,但已经将无锁FIFO写为环形缓冲区。 相对容易的是“无互锁”队列,这意味着读者不会阻止写入者,反之亦然,但必须对多个读者进行序列化,并且多个作者必须也是如此。 所以它不是完全无锁,但读者和作者之间仍然没有锁定/阻塞。

也许有更好的方法可以减少锁定,但这可能对你有帮助。

相关问题