Cheok Yan Cheng
Cheok Yan Cheng

Reputation: 42828

C++ Equivalent java.util.concurrent.ArrayBlockingQueue

May I know is there any C++ equivalent class, to Java java.util.concurrent.ArrayBlockingQueue

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

Upvotes: 4

Views: 1264

Answers (6)

Anand Kulkarni
Anand Kulkarni

Reputation: 435

This is my C++ implementation of ArrayBlockingQueue trying to be as close and conformant as possible to Java implementation. except iterator thread safety rest is perfectly compliant. I dont consider generally there is a need to iterate the whole queue ar run time.

https://github.com/anandkulkarnisg/ArrayBlockingQueue

The Examples should demonstrate how to use the blocking queue. It is internally implemented as a circular buffer based queue using raw array [ for good performance ].

Upvotes: 1

Jagannath
Jagannath

Reputation: 4025

concurrent_queue might be the one you are looking for. It comes with Parallel Patterns library from Microsoft.

Upvotes: 2

ZoogieZork
ZoogieZork

Reputation: 11289

Check out tbb::concurrent_bounded_queue from the Intel Threading Building Blocks (TBB).

(Disclaimer: I haven't actually had a chance to use it in a project yet, but I've been following TBB).

Upvotes: 5

Jerry Coffin
Jerry Coffin

Reputation: 490663

The current version of C++ doesn't include anything equivalent (it doesn't include any thread support at all). The next version of C++ (C++0x) doesn't include a direct equivalent either.

Instead, it has both lower level constructs from which you could create a thread safe blocking queue (e.g. a normal container along with mutexes, condition variables, etc., to synchronize access to it).

It also has a much higher level set of constructs: a promise, a future, a packaged_task, and so on. These completely hide the relatively low level details like queuing between the threads. Instead, you basically just ask for something to be done, and sometime later you can get a result. All the details in between are handled internally.

If you want something right now, you might consider the Boost Interprocess library. This includes (among other things) a Message Queue class. If memory serves, it supports both blocking and non-blocking variants.

Upvotes: 4

ergosys
ergosys

Reputation: 49049

Intel's Threading Building Blocks has a couple different concurrent queues, one of which might be similar.

Upvotes: 2

Collin Dauphinee
Collin Dauphinee

Reputation: 14003

Standard C++ has no equivalent, as it has no concept of concurrency; without concurrency, such a structure is both useless and dangerous, as operating on it could potentially block forever if there are no other threads.

It would be easy to implement, however, but the implementation details would depend on the threading library you're using.

As a side note, the upcoming C++1x standard will add some basic threading features to the standard library.

Upvotes: 0

Related Questions