cout stürzt ab
-
Hallo habe ein Programm mit zig threads. So kann es durchaus vorkommen das cout mehrere male zur selben zeit genutzt wird um ausgaben zu machen.
Nun habe ich festgestellt das es zu abstürzen kommen kann wenn ich ein cout mache.
Kann es zu cout abstürzen kommen wenn es durch zeitlichen zufall mehrmals zur gleichen zeit aufgerufen wird?
-
greenghecco schrieb:
Hallo habe ein Programm mit zig threads. So kann es durchaus vorkommen das cout mehrere male zur selben zeit genutzt wird um ausgaben zu machen.
Nun habe ich festgestellt das es zu abstürzen kommen kann wenn ich ein cout mache.
Kann es zu cout abstürzen kommen wenn es durch zeitlichen zufall mehrmals zur gleichen zeit aufgerufen wird?Ja, es kann. Je nachdem, wie der Compilerbauer das gestrickt hat.
Bei mir GCC stürzt aber da gar nichts ab. Bei mir mischen sich nur die Ausgabezeilen auf häßlichste Weise.
-
das gleiche sollte beim msvc der fall sein.
da gibts aber so gar ne option für thread-safe ausgaben, so weit ich das weiß.bb
-
Die Dokumentation des Compilerherstellers, genau gesagt, die Doku zur Standardbibliothek, sollte Auskunft darüber geben, ob cout thread-safe ist oder nicht.
Sollte cout nicht thread-safe sein, müssen alle Zugriffe über ein Lock sequentialisiert werden.
std::mutexundstd::lock_guardwerden in C++0x das Mittel der Wahl sein. Ansonsten musst Du die betriebssystemspezifischen Funktionen verwenden.
-
Die Dokumentation des Compilerherstellers
Kompilerhersteller sind dokumentiert?

-
das hab ich mir fast gedacht. NUtze CS 2008 unter win7. Ja das mit den lock (mutexe) hab ich mir auch vorgstellt. War bis dato aber zu faul bei jedem cout eins zu machen, ist aber sicherlich sinnvoll ;). Dankö
-
greenghecco schrieb:
War bis dato aber zu faul bei jedem cout eins zu machen, ist aber sicherlich sinnvoll ;). Dankö
sinnvoller wäre, nicht in diversen Threads Ausgaben einzuführen, sondern besser einem Thread diese Aufgabe anzuvertrauen, und die anderen Threads schicken dem Ausgabethread Ausgabe-Aufträge. Die können dann entsprechend verwaltet, ggf. sortiert und aufbereitet werden, um eine saubere Ausgabe zu gewährleisten.