代码之家  ›  专栏  ›  技术社区  ›  Khaled Alshaya

在C++线程安全(Cout,CERP,Cug)中是否有标准输出流?

  •  10
  • Khaled Alshaya  · 技术社区  · 17 年前

    我知道目前没有线程的概念 C++ 但是 this article is saying :

    一种类型安全、线程安全、便携式 日志记录机制

    …

    这个 fprintf() 功能是线程安全, 所以即使这个日志是从 不同的线程,输出行 不会被扰乱的。

    怎么样 cout , cerr 和 clog ?

    我认为这个问题也适用于C++中的所有流类型。 fstream 和 stringstream .

    3 回复  |  直到 17 年前
        1
  •  8
  •   Daniel Earwicker    17 年前

    本文对 fprintf 应用程序编程接口。它不涉及C++流。这是非常正确的,因为在这些流中没有这样的保证。

    注意,虽然文章中的日志记录类使用C++流语法,但它通过 std::ostringstream 为每个日志事件创建和销毁的对象,因此不在线程之间共享。它使用 格式化输出 将内容实际写入控制台。

    Microsoft C库声称它与POSIX兼容,因此本文中的代码可能是非常广泛的可移植代码(因为许多其他流行的操作系统与POSIX兼容)。但这并不意味着标准的C++流是线程安全的。

        2
  •  9
  •   Warren Young    17 年前

    这将是一个具体的实现细节。您可以询问具有运行时库Y的编译器X是否具有线程安全标准流,但不能询问所有实现是否都有,因为允许实现在线程安全方面有所不同。这意味着C++没有内置的线程概念。它是 全部的 具体实施。

        3
  •  2
  •   sbi    17 年前

    由于当前的C++标准甚至不承认有所谓的“线程”,所以它根本不能保证线程安全。

    这是所有实现的定义。