Generalnie zakładam, że strumienie nie są zsynchronizowane, to do użytkownika należy odpowiednie zablokowanie. Czy jednak takie rzeczy jak cout
biblioteka standardowa są traktowane w specjalny sposób?
Oznacza to, że jeśli wiele wątków pisze do, cout
czy mogą uszkodzić cout
obiekt? Rozumiem, że nawet po zsynchronizowaniu nadal otrzymujesz wyjście z przeplotem losowo, ale czy to przeplot jest gwarantowane. To znaczy, czy można bezpiecznie używać cout
z wielu wątków?
Czy ten dostawca jest zależny? Co robi GCC?
Ważne : jeśli powiesz „tak”, podaj jakieś odniesienie do odpowiedzi, ponieważ potrzebuję jakiegoś dowodu na to.
Nie martwię się również o podstawowe wywołania systemowe, te są w porządku, ale strumienie dodają warstwę buforowania na wierzchu.
printf
świeci, gdy cały wynik jest zapisywany stdout
w jednym ujęciu; podczas korzystania z std::cout
każdego łącza łańcucha wyrażeń zostanie wyprowadzony osobno stdout
; Pomiędzy nimi może znajdować się inny wątek, w stdout
wyniku którego kolejność końcowego wyjścia zostanie zepsuta.