Ich habe einen Thread-Pool besteht aus 4 Threads: t1, t2, t3 und t4. Sie laufen gleichzeitig, aber die Eingabe von t3 und t4 hängt von der Ausgabe von t2 ab. Wie sollte ich die Nachrichtenwarteschlange implementieren, damit nach t2 die Ausgabedaten zur Verarbeitung an t3 und t4 gesendet werden? Ich habe versucht, die Nachrichtenwarteschlange mit Sperrmechanismus zu implementieren, aber es scheint, dass das Sperren ziemlich teuer ist. Gibt es einen Lock-Free-Mechanismus, der Daten zwischen Threads weitergibt? Ich verwende boost :: thread in Visual Studio 2010.C++ - Übergabe von Daten zwischen Threads
Antwort
Boost hat eine sperrfreie Warteschlange: http://www.boost.org/doc/libs/1_56_0/doc/html/lockfree.html.
Hallo Tomo, für meine t3 und t4 müssen die Ausgabedaten von t2 erhalten. Also frage ich mich, wer die Daten aus der Nachrichtenwarteschlange herausnehmen wird? Sollte es t2 sein, weil wir nicht sicher sind, ob t3 oder t4 zuerst fertig werden? Ich meine, wann immer t2 neue Daten in die Warteschlange stellt, wird es auch die Warteschlange aus der Warteschlange nehmen. – Bent
Ja, t2 sollte seine Ausgabe in die Warteschlange stellen. T3 und t4 sollten regelmäßig prüfen, ob sich in der Warteschlange etwas befindet, das verarbeitet werden soll. Angenommen, t3 und t4 haben andere Dinge zu tun. Wenn nicht (d. H. Ihre einzige Aufgabe ist es, auf die Ausgabe von t2 zu warten und sie zu verarbeiten), vergessen Sie blockierungsfreie Warteschlangen und gehen Sie einfach mit einer Sperrlösung. Wenn die Threads trotzdem warten müssen, sollten die Kosten für das Sperren nicht Ihr Problem sein. – Tomo
Sie können tbb betrachten. Es bietet eine breite Palette von parallelen Konzepten einschließlich concurrent_queue
, concurrent_bounded_queue
(zum Warten), pipeline
, flow::graph
. Die ersten beiden sind auch verfügbar in ppl innerhalb MS VS 2010
Hallo Anton, danke fürs antworten! Weil mein Projekt momentan Boost-Lib verwendet, werde ich mich mehr auf Boost konzentrieren. Aber ich werde auch auf TBB schauen, wenn ich keine Lösung finden kann. :)) – Bent
- 1. Übergabe von Daten zwischen Objekten in C#
- 2. Julia: Übergabe von Daten zwischen Coroutinen (Aufgaben)
- 3. AS3 Übergabe von Daten zwischen Objekten/Klassen
- 4. Senden von String-Daten zwischen Threads (Win32)
- 5. C# -Threads - Nachrichten zwischen Threads posten
- 6. Senden von Nachrichten zwischen Threads in C#
- 7. Übergabe von Variablen zwischen 2 Threads in einer C# -Konsolenanwendung (Neuling hier)
- 8. In C# Wie wird empfohlen, Daten zwischen 2 Threads weiterzuleiten?
- 9. Übergabe von Zeigern zwischen C und Java über JNI
- 10. Fackel-Threads - Daten zwischen Main und Threads einmal übertragen
- 11. Wie gebe ich Daten zwischen Threads weiter?
- 12. Wie kann die Übergabe von Arrays zwischen zwei Pool-Threads synchronisiert werden?
- 13. Übergabe (Funktion) Zeiger zwischen c und Mono
- 14. Übergabe von Daten zwischen den Staaten im Ember.js Zustand Managern
- 15. iOS Swift: Übergabe von Daten zwischen Sichten und Abschluss Handler
- 16. Meteor - Übergabe von Daten zwischen Helfern, Ereignissen und Vorlagen
- 17. Übergabe von SQLContext zwischen Klassen
- 18. Daten zwischen zwei Threads in Python Austausch
- 19. Übergabe von Variablen zwischen 2 Formen, Multithreading C#
- 20. Verwenden von SendMessageToDescendants zwischen Threads
- 21. C# Übergabe von Daten zwischen Formularen ohne "Form1 frm = new Form1();"
- 22. Abbrechen von C# -Threads
- 23. Array von Threads C#
- 24. Kompilieren von C++ - Threads
- 25. Socket-Übergabe zwischen Prozessen
- 26. Sharing Threads zwischen Prozessen?
- 27. Übergabe von Variablen zwischen Funktionen funktioniert nicht
- 28. Übergabe von Datentypen von C++ nach Java/Java nach C++
- 29. Ereignisse von geteilten Kommunikationskanal zwischen Threads
- 30. malloc und Freigeben von Speicher zwischen Threads in C
Lernen Sie von folgendem Link: http://stackoverflow.com/questions/20595760/c-communication-between-threads –