C ++等效java.util.concurrent.ArrayBlockingQueue

时间:2010-01-06 06:47:21

标签: java c++

我是否知道Java java.util.concurrent.ArrayBlockingQueue

是否存在任何C ++等效类

http://download.java.net/jdk7/docs/api/java/util/concurrent/ArrayBlockingQueue.html

6 个答案:

答案 0 :(得分:5)

tbb::concurrent_bounded_queue(TBB)查看Intel Threading Building Blocks

(免责声明:我实际上还没有机会在项目中使用它,但我一直在关注TBB)。

答案 1 :(得分:4)

当前版本的C ++不包含任何等价物(它根本不包含任何线程支持)。下一版本的C ++(C ++ 0x)也不包含直接等效版本。

相反,它有两个较低级别的构造,您可以从中构建一个线程安全阻塞队列(例如,一个普通容器以及互斥锁,条件变量等,以同步对它的访问)。

它还具有更高级别的构造集:promisefuturepackaged_task等等。这些完全隐藏了相对较低级别的细节,如线程之间的排队。相反,你基本上只是要求做一些事情,有时候你可以得到一个结果。中间的所有细节都在内部处理。

如果您现在想要什么,可以考虑使用Boost Interprocess库。这包括(除其他外)Message Queue类。如果内存服务,它支持阻塞和非阻塞变体。

答案 2 :(得分:2)

英特尔的线程构建模块有两个不同的并发队列,其中一个可能类似。

答案 3 :(得分:2)

concurrent_queue 可能是您正在寻找的那个。它附带了Microsoft的Parallel Patterns库。

答案 4 :(得分:1)

这是我的ArrayBlockingQueue的C ++实现,试图与Java实现尽可能紧密和一致。除了迭代器线程安全性其余部分完全合规。我一般不认为需要迭代整个队列的运行时间。

https://github.com/anandkulkarnisg/ArrayBlockingQueue

示例应演示如何使用阻塞队列。在内部使用原始数组将其实现为基于循环缓冲区的队列[以获得良好的性能]。

答案 5 :(得分:0)

标准C ++没有等价物,因为它没有并发概念;如果没有并发性,这样的结构既无用又危险,因为如果没有其他线程,对它的操作可能会永远阻塞。

然而,它很容易实现,但实现细节将取决于您正在使用的线程库。

作为旁注,即将推出的C ++ 1x标准将为标准库添加一些基本的线程功能。