Em geral, presumo que os fluxos não estão sincronizados, cabe ao usuário fazer o bloqueio apropriado. No entanto, coisas como cout
receber tratamento especial na biblioteca padrão?
Ou seja, se vários threads estiverem gravando, cout
eles podem corromper o cout
objeto? Eu entendo que, mesmo se sincronizado, você ainda terá uma saída intercalada aleatoriamente, mas essa intercalação é garantida. Ou seja, é seguro usar a cout
partir de vários threads?
Este fornecedor é dependente? O que o gcc faz?
Importante : forneça algum tipo de referência para sua resposta se você disser "sim", pois preciso de algum tipo de prova disso.
Minha preocupação também não é com as chamadas de sistema subjacentes, elas estão bem, mas os fluxos adicionam uma camada de buffer no topo.
printf
brilha, pois a saída completa é gravada de stdout
uma só vez; ao usar std::cout
cada elo da cadeia de expressão seria enviado separadamente para stdout
; entre eles pode haver algum outro thread de gravação stdout
devido ao qual a ordem da saída final fica confusa.