我已经发现了几个实现单个生产者的单个消费者,但没有多个生产单个消费者。

没有一个无锁队列为"多个生产单个消费者"存在于德尔菲?

有帮助吗?

解决方案

无锁队从 OmniThreadLibrary 支持多个生产者。你可以单独使用它从该线图书馆(即你可以使用OtlContainers单位在任何其他框架)。

作为丹尼尔指出下面,有两个队在OmniThreadLibrary.一个在OtlContainers支持多生产者和多个消费者的话,"聪明"的版本,在OtlComm(它只是包装更简单的版本)只有单一的制片人/单的消费者。

文件仍然是一个大问题的OmniThreadLibrary项目:(.一些信息在队列中可以找到 在这里, .

其他提示

可能,可能是有用的:互锁SLIST功能

http://svn.berlios.de/ svnroot /回购/ dzchart /公用事业/ dzLib /中继/ lockfree /

@Daniele特提:

读者必须等待所有的作家谁仍然可以访问的的队列退出排队方法。由于读者确实在出列方法的第一件事就是提供其进入排队新作家新队列它不应该多久有一个参考旧队列退出排队的所有作家。但是,你是对的:它是锁只为作家免费的,但也可能仍然需要读线程等待一些作家退出排队

对于多生产者/单消费者队列/ FIFO,就可以很容易地使使用SLIST或微不足道的锁定免LIFO堆栈一个LockFree。你要做的就是对消费者(这也可以做为了简单起见SLIST或者你选择的任何其他堆栈模型)第二个“私人”堆栈。消费者离开本私人栈项目。每当私人LIFO被exhasted,你做一个冲洗,而不是弹出关闭共享并发SLIST(敛整个SLIST链),然后走在顺序被冲洗的列表项推动到私人堆栈。

这对于单生产者/单消费者和用于多生产者/单消费者的工作原理。

然而,它不用于多生产者/多消费者情况下工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top