【发布时间】:2010-06-05 04:32:28
【问题描述】:
我想知道 Fober 等人的论文 http://nedko.arnaudov.name/soft/L17_Fober.pdf 中提出的先进先出队列是否是多消费者并产生先进先出队列。如果不是,哪个是记录最好的多消费者和生产者 FIFO 队列?
谢谢
【问题讨论】:
我想知道 Fober 等人的论文 http://nedko.arnaudov.name/soft/L17_Fober.pdf 中提出的先进先出队列是否是多消费者并产生先进先出队列。如果不是,哪个是记录最好的多消费者和生产者 FIFO 队列?
谢谢
【问题讨论】:
是的。阅读“3.1 线性化”部分 pop 操作假定可能发生并发出队。这意味着多个线程将能够消费队列。
【讨论】:
我没有读过论文,但我在这里做了一个很大的假设:论文使用 CAS(比较和交换)技术来实现并发。
无锁并不意味着无阻塞。 CAS 的使用会停止其他线程,但至少有一个线程会一直“向前”移动。
多个生产者都写入同一个队列 - 这不是问题。棘手的是多个消费者。如果每个消费者都必须访问数据,那么我将通过多个队列来实现它,并且数据将在一个队列中处理后落入下一个队列。如果您的意思是多个消费者通过线程,那么这将适用于上述方法
【讨论】:
我不知道“Fober 队列”,但我已经将无锁 FIFO 写成环形缓冲区。 相对容易的是“无互锁”队列,这意味着读取器不会阻塞写入器,反之亦然,但多个读取器必须序列化,多个写入器也必须序列化。 所以它不是完全无锁的,但读者和作者之间仍然没有锁定/阻塞。
也许有更好的方法可以减少锁定,但也许这已经对您有所帮助。
【讨论】: