Im Allgemeinen gehe ich davon aus, dass Streams nicht synchronisiert sind. Es ist Sache des Benutzers, eine entsprechende Sperrung vorzunehmen. Erhalten Dinge wie cout
eine Sonderbehandlung in der Standardbibliothek?
Das heißt, wenn mehrere Threads schreiben, cout
können sie das cout
Objekt beschädigen? Ich verstehe, dass selbst wenn synchronisiert, Sie immer noch zufällig verschachtelte Ausgabe erhalten würden, aber ist diese Verschachtelung garantiert. Ist es sicher, cout
von mehreren Threads aus zu verwenden?
Ist dieser Anbieter abhängig? Was macht gcc?
Wichtig : Bitte geben Sie eine Referenz für Ihre Antwort an, wenn Sie "Ja" sagen, da ich einen Beweis dafür benötige.
Mein Anliegen ist auch nicht die zugrunde liegenden Systemaufrufe, diese sind in Ordnung, aber die Streams fügen eine Pufferschicht hinzu.
printf
leuchtet hier die gesamte Ausgabe auf stdout
einmal. bei Verwendung würde std::cout
jedes Glied der Ausdruckskette separat ausgegeben werden an stdout
; dazwischen kann es einen anderen Thread geben, auf den geschrieben wird stdout
, wodurch die Reihenfolge der endgültigen Ausgabe durcheinander gebracht wird.