4 Stimmen

C++ Äquivalent java.util.concurrent.ArrayBlockingQueue

Darf ich wissen, gibt es eine C++-Äquivalent-Klasse, zu Java java.util.concurrent.ArrayBlockingQueue

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

5voto

ZoogieZork Punkte 11057

Überprüfen Sie tbb::concurrent_bounded_queue von der Intel Threading-Bausteine (TBB).

(Disclaimer: Ich hatte noch keine Gelegenheit, es in einem Projekt zu verwenden, aber ich habe TBB verfolgt).

4voto

Jerry Coffin Punkte 452852

Die aktuelle Version von C++ enthält nichts Vergleichbares (sie enthält überhaupt keine Thread-Unterstützung). Auch die nächste Version von C++ (C++0x) enthält keine direkte Entsprechung.

Stattdessen verfügt es über beide Konstrukte auf niedrigerer Ebene, mit denen man eine thread-sichere blockierende Warteschlange erstellen kann (z.B. einen normalen Container zusammen mit Mutexen, Bedingungsvariablen usw., um den Zugriff darauf zu synchronisieren).

Es hat auch eine viel höhere Ebene von Konstrukten: eine promise , a future , a packaged_task , und so weiter. Diese verbergen die relativ einfachen Details wie Warteschlangen zwischen den Threads. Stattdessen fordern Sie im Grunde nur an, dass etwas getan wird, und irgendwann später erhalten Sie ein Ergebnis. Alle dazwischen liegenden Details werden intern gehandhabt.

Wenn Sie sofort etwas brauchen, können Sie die Boost Interprocess Library in Betracht ziehen. Diese enthält (unter anderem) eine Nachrichtenwarteschlangenklasse. Wenn ich mich recht erinnere, unterstützt sie sowohl blockierende als auch nicht-blockierende Varianten.

2voto

ergosys Punkte 45265

Intels Threading Building Blocks hat einige verschiedene gleichzeitige Warteschlangen, von denen eine ähnlich sein könnte.

2voto

Jagannath Punkte 3948

gleichzeitige_warteschlange könnte das sein, wonach Sie suchen. Es wird mit der Parallel Patterns-Bibliothek von Microsoft geliefert.

1voto

Anand Kulkarni Punkte 335

Dies ist meine C++-Implementierung von ArrayBlockingQueue versucht, so nah und konform wie möglich zu Java-Implementierung zu sein. außer Iterator-Thread-Sicherheit Rest ist perfekt konform. Ich halte es im Allgemeinen nicht für notwendig, die gesamte Warteschlange zur Laufzeit zu iterieren.

https://github.com/anandkulkarnisg/ArrayBlockingQueue

Die Beispiele sollen zeigen, wie man die blockierende Warteschlange verwendet. Sie ist intern als zirkuläre pufferbasierte Warteschlange unter Verwendung von Raw Array [ für eine gute Leistung ] implementiert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X