Ara*_*raK 10 c++ iostream thread-safety
我知道当前没有线程的概念C++,但是本文说:
类型安全,线程安全,便携式 日志记录机制
.....
该
fprintf()函数是线程安全的,因此即使从不同的线程使用此日志,输出行也不会被加扰.
怎么样cout,cerr和clog?
我认为这个问题适用于C++中的所有类型的流类型,例如fstream和stringstream.
这将是一个特定于实现的细节.您可以询问带有运行时库Y的编译器X是否具有线程安全的标准流,但您无法询问是否所有实现都这样做,因为允许实现在线程安全方面有所不同.这是C++没有内置线程概念的部分原因.这都是特定于实现的.
本文对fprintfAPI 的POSIX标准提出了主张.它没有说明C++流.这是非常正确的,因为在这些流上没有这样的保证.
请注意,虽然该文章中的日志记录类使用C++流语法,但它通过std::ostringstream为每个日志记录事件创建和销毁的对象来执行此操作,因此不会在线程之间共享.它用于fprintf实际将内容写入控制台.
Microsoft C库使一些声称符合POSIX标准,因此本文中的代码可能具有相当广泛的可移植性(因为许多其他流行的操作系统都符合POSIX).但这并不意味着标准C++流是线程安全的.