我知道当前没有线程的概念C++
,但这篇文章是说:
一种类型安全、线程安全、可移植的 日志机制
......
该
fprintf()
函数是线程安全的,因此即使从不同的线程使用此日志,输出行也不会被打乱。
和怎么cout
样?cerr
clog
我认为这个问题也适用于 C++ 中的所有类型的流类型,比如fstream
和stringstream
.
我知道当前没有线程的概念C++
,但这篇文章是说:
一种类型安全、线程安全、可移植的 日志机制
......
该
fprintf()
函数是线程安全的,因此即使从不同的线程使用此日志,输出行也不会被打乱。
和怎么cout
样?cerr
clog
我认为这个问题也适用于 C++ 中的所有类型的流类型,比如fstream
和stringstream
.
那将是特定于实现的细节。您可以询问带有运行时库 Y 的编译器 X 是否具有线程安全的标准流,但您不能询问所有实现是否都有,因为允许实现在线程安全方面有所不同。这是 C++ 没有内置线程概念的部分含义。这都是特定于实现的。
这篇文章声明了fprintf
API 的 POSIX 标准。它没有说明 C++ 流。这是完全正确的,因为这些流上没有这样的保证。
请注意,尽管该文章中的日志记录类使用 C++ 流语法,但它通过std::ostringstream
为每个日志记录事件创建和销毁的对象来实现这一点,因此不会在线程之间共享。它用于fprintf
将内容实际写入控制台。
Microsoft C 库声称与 POSIX 兼容,因此本文中的代码可能具有相当广泛的可移植性(因为许多其他流行的操作系统都与 POSIX 兼容)。但这并不意味着标准 C++ 流是线程安全的。
由于当前的 C++ 标准甚至不承认存在称为“线程”的东西,因此它当然根本没有提供任何关于线程安全的保证。
这都是实现定义的。