【问题标题】:Logging and multithreading日志记录和多线程
【发布时间】:2014-02-06 17:15:07
【问题描述】:

我注意到大多数记录器都被宣传为线程安全的。

这是什么意思?

它们对特定线程库是否安全,或者它们在任何多线程环境中是否安全(例如 PThread、Boost 线程、C++11 线程、Win32 线程、OpenMP 线程……)?

【问题讨论】:

  • 互斥锁的概念不是特定于库的。通常记录器确实使用互斥锁来阻止线程相互干扰。线程安全记录器旨在运行在各种线程上。
  • @user1810087:据我所知read,互斥锁的概念是特定于库的。但是,由于例如OpenMP 和 Boost 线程都基于 PThreads(在 UNIX 中),它们使用相同的 PThreads 互斥锁。也许这就是它们兼容的原因。
  • 它们并不具体,混合它们只是一个坏主意(而且也很丑陋)。您甚至可以编写自己的互斥锁并在每种类型的线程上使用它,只要互斥锁实例不是线程本地的。
  • 我不打算混合它们。我只是想确保日志库可以与任何多线程库一起使用。

标签: c++ multithreading logging pthreads openmp


【解决方案1】:

这意味着您不会在日志文件中看到类似的内容:

this is the line from the firsThis is line from the second thread
t thread

通常这意味着记录器在任何受支持的环境中写入流时都会使用所需的锁定。

【讨论】:

    【解决方案2】:

    如果记录器是线程安全的,这意味着您可以从任何线程(无论是 pthread、boost 还是 openmp)调用它的函数。这通常是通过使用互斥锁来防止同时输出来完成的。如果没有它们,如果从不同线程使用日志,您的程序可能会输出混合行甚至崩溃。

    【讨论】:

      猜你喜欢
      • 2020-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-05
      • 1970-01-01
      • 2016-02-23
      • 2022-01-03
      相关资源
      最近更新 更多