我知道在当前的C++中没有线程的概念,但是这篇文章是说
A类型,线程安全,便携式日志记录机制 .
fprintf()函数是threadsafe,所以即使这个日志来自不同的线程,输出行也不会被置乱。
那么cout,cerr和clog呢?
我认为这个问题也适用于C++中的各种流类型,如fstream和stringstream。
发布于 2009-09-27 11:54:14
本文对fprintf API的POSIX标准进行了说明。它没有提到C++流。这是相当正确的,因为在这些河流上没有这样的保证。
注意,尽管本文中的日志类使用C++流语法,但它通过为每个日志事件创建和销毁的std::ostringstream对象来实现这一点,因此在线程之间不共享。它使用fprintf将内容实际写入控制台。
Microsoft C库声称它与POSIX兼容,因此本文中的代码可能是相当广泛的可移植性(因为许多其他流行的操作系统都兼容POSIX )。但这并不意味着标准的C++流是线程安全的。
发布于 2009-09-27 12:11:12
由于当前的C++标准甚至不承认有一些被称为“线程”的东西,所以它根本没有提供任何线程安全方面的保证。
这都是实现定义的。
https://stackoverflow.com/questions/1483403
复制相似问题