Frage

Ich habe ein Multi-Thread-Programm, bei dem zwei separate Threads Debug-Ausgabe an std :: clog senden und die Ausgänge durchsetzt werden. Ich möchte einen einfachen Weg finden, um die Ausgabe so zu erzwingen, zumindest getrennt zu bleiben, außer bei Linieneinspeisen in der Ausgabe. Auf diese Weise kann die Debug -Ausgabe leichter interpretiert werden. An einigen Stellen habe ich vor der Ausgabe einen Schlaf (1) eingefügt und die Ausgabe in eine Schnur gesammelt, bevor ich sie an Clog gesendet habe, um die Kollisionswahrscheinlichkeit zu verringern, aber ich würde eine robustere und sicherere Lösung bevorzugen.

Gibt es eine einfache Möglichkeit, um sicherzustellen, dass jeder Thread jeweils eine ganze Zeile in std :: clog schreibt, bevor der andere Thread einsteigen und eine eigene Ausgabezeile schreiben kann?

War es hilfreich?

Lösung

Es gibt keine besonders einfache Möglichkeit, dies zu tun, und hier gibt es eine erweiterte Diskussion darüber: http://www.cplusplus.com/forum/general/27760/

Das Problem ist dort mit der Schaffung eines Neuen etwas gelöst AtomicStream Das schreibt atomisch eine ganze Linie, bevor alles andere gestreamt wird (dies wird mit Puffertricks erfolgt). Sie müssen eine ähnliche Lösung finden. Entschuldigung für die nicht einfache Antwort-Thread-Synchronisation muss es irgendwie in Ihre Lösung schaffen.

Dies mag derivat sein, aber wenn Ihre std::clog Umleitet in eine Datei, Sie können auch mehrere Dateien für die mehrere Threads haben.

Andere Tipps

Du ... kannst nicht. Sie schreiben gleichzeitig in denselben Strom. Die Pufferung in clog wird ein wenig helfen, aber es gibt immer noch keine Garantien.

Wenn Sie die Protokollierung Ihrer Threads nicht synchronisieren möchten (irgendwie teuer für das, was Sie tun), sollten Sie sich stattdessen ansehen, um eine Protokollierungsfunktion zu verwenden (so können Sie sich anmelden, um verschiedene Dateien für verschiedene Dinge zu sagen).

Ja, Sie suchen nach einer Cross-Thread-Synchronisationsmethode. Diese sind in der Regel in der API eines Betriebssystems erhältlich. Sie können auch einen in Boost finden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top