2010-05-15 7 views
6

Mögliche Duplizieren:
Is there a production ready lock-free queue or hash implementation in C++Gibt es eine gleichzeitige Container-Bibliothek für C++

Ich bin für Implementierungen von schleusenfreien Behältern suchen:

  • Queue
  • Stapel
  • Hash Karte
  • etc ...

Wie wäre es blockiert Behälter:

  • Queue Blocking
  • Stapel Blocking

Gibt es gute Bibliotheken da draußen? Ich würde es gerne unterlassen, diese Datenstrukturen zu schreiben ... Ich würde lieber etwas verwenden, das von der Community getestet wurde.

+1

Wenn Sie das Wort "Blockierung" verwenden, ist es nicht frei von Sperren ... –

+0

@Evan, korrigierte ich meine Frage, aber es sollte eine Möglichkeit geben, eine blockierungsfreie Warteschlange mit CAS und so etwas zu machen ein C++ äquivalentes ManualResetEvent ... – Kiril

+0

@Link: CAS kann nicht zum Implementieren der Blockierung verwendet werden. Im besten Fall könnten Sie Spinlocks verwenden (was für diese Art von Sache schrecklich wäre), aber Sie brauchen die Hilfe des Schedulers (Mutex/Semaphor/etc), um tatsächlich zu blockieren. –

Antwort

4

Werfen Sie einen Blick auf die Container-Klassen Intel TBB. Der Referenz sagt:

Die Containerklassen mehrere Fäden erlauben gleichzeitig bestimmte Methoden auf dem gleichen Behälter aufzurufen.

3

Herb Sutter hat ein paar Artikel in seiner Effective Concurrency-Reihe in Dr. Dobbs Journal. Die beiden Artikel werden Sie wahrscheinlich sofort lesen wollen, sind:

Die rest of the series ist auf jeden Fall einen Wert lesen auch.

+0

danke ... Ich bin mir bewusst, dass es Artikel gibt, die beschreiben, wie man diese Behälter schreibt, aber ich würde lieber eine erprobte und getestete Bibliothek verwenden, anstatt die Behälter selbst zu schreiben. – Kiril

+0

@Lirik: Der Hauptgrund, warum ich mit ihnen verlinke, ist, weil Herb eine * sehr * tiefe Diskussion darüber führt, wie und warum es funktioniert und welche Fallstricke es gibt, wenn man es schreibt. Er hat auch vollständige, funktionierende Beispiele, die ich kopiert und wörtlich mit Erfolg benutzt habe. (Obwohl sie einen C++ 0x-kompatiblen Compiler oder einen äquivalenten atomaren <> -Typ erwarten.) – greyfade

Verwandte Themen