【发布时间】:2011-09-16 11:39:14
【问题描述】:
一般来说,我假设流是不同步的,由用户来做适当的锁定。但是,像cout 这样的东西在标准库中会得到特殊处理吗?
也就是说,如果多个线程正在写入cout,它们会破坏cout 对象吗?我知道即使同步,您仍然会得到随机交错的输出,但是交错是有保证的。也就是说,在多个线程中使用cout 是否安全?
该供应商是否依赖于该供应商? gcc 是做什么的?
重要提示:如果您说“是”,请为您的回答提供某种参考,因为我需要某种证明。
我关心的也不在于底层系统调用,这些都很好,但流在顶部添加了一层缓冲。
【问题讨论】:
-
这取决于供应商。 C++(在 C++0x 之前)没有多线程的概念。
-
c++0x 呢?它定义了一个内存模型和一个线程是什么,所以这些东西可能会在输出中漏掉?
-
是否有供应商使其成为线程安全的?
-
有人有最新的 C++2011 提议标准的链接吗?
-
在某种意义上,这是
printfshines作为完整输出一次性写入stdout的地方;当使用std::cout时,表达式链的每个链接将分别输出到stdout;在它们之间可能有一些其他线程写入stdout,因此最终输出的顺序被弄乱了。