我发现了一个生产者,单个消费者几种实现方式,但没有多生产者单个消费者。
是否为“多个生产者,单个消费者”无锁队列德尔福存在吗?
我发现了一个生产者,单个消费者几种实现方式,但没有多生产者单个消费者。
是否为“多个生产者,单个消费者”无锁队列德尔福存在吗?
无锁从队列OmniThreadLibrary支持多个生产者。 您可以单独使用它从线程库(即您可以在任何其他的框架使用OtlContainers单位)。
由于丹尼尔下面指出,还有在OmniThreadLibrary两个队列。 在OtlContainers的一个支持多个生产者和多个消费者,而“聪明”版本OtlComm(这仅仅是简单版本的包装)只有一个生产者/单次消费。
文档仍然是OmniThreadLibrary项目:(一大问题,在队列中的一些信息可以发现在这里 。
可能这可能是有益的: 联锁SLIST功能 。
http://svn.berlios.de/svnroot/repos/dzchart/utilities/dzLib/trunk/lockfree/
@Daniele特提:
读者必须等待所有的作家谁仍然可以访问旧队列退出排队方法。 由于读者确实在出列方法的第一件事就是提供其进入排队新作家新队列它不应该多久有一个参考旧队列退出排队的所有作家。 但是,你是对的:它是锁只为作家免费的,但也可能仍然需要读线程等待一些作家退出排队。
对于多生产者/单消费者队列/ FIFO,您可以使用SLIST或一个简单的锁免费LIFO堆栈很容易使一个LockFree。 你要做的就是对消费者(这也可以做为了简单起见SLIST或者你选择的任何其他堆栈模型)第二个“私人”堆栈。 消费者离开本私人栈项目。 每当私人后进先出法exhasted,你做了冲洗,而不是流行过的共享并行SLIST(抓取整个SLIST链),然后走在顺序冲洗的列表项目推到私人堆栈。
这适用于单生产者/单消费者和企业对多生产者/单消费者。
然而,这并不多,生产者/多消费者的情况下工作。