在多线程应用程序中控制台

Abr*_*ile 4 c c++ logging multithreading

通常开发我用于打印到控制台的应用程序,以获得有用的调试/跟踪信息.我正在使用的应用程序,因为它是多线程的,有时我看到我printf相互重叠.

我尝试使用a同步屏幕,mutex但我最终放慢了速度并阻止了应用程序.如何解决这个问题?

我知道MT日志库,但在使用它们时,由于我记录太多,我放慢了(有点)我的应用程序.

我想到了以下想法......而不是我的应用程序中记录为什么不在它外面登录?我想通过套接字将日志信息发送到实际在屏幕上打印出来的第二个应用程序进程.

你知道任何图书馆已经这样做了吗?我使用Linux/gcc.

谢谢

AFG

Joh*_*ing 11

你有3个选择.按复杂程度递增:

  1. 只需在每个线程中使用一个简单的互斥锁即可.所有线程共享互斥锁.
  2. 将所有输出发送到一个只执行日志记录的线程.
  3. 将所有输出发送到单独的日志记录应用程序.

在大多数情况下,我会选择#2.#1可以作为起点,但除了最简单的应用程序之外,您可以遇到序列化应用程序的问题.#2仍然非常简单,简单是一件好事,但它也具有很强的可扩展性.你仍然最终在主应用程序中进行处理,但对于绝大多数应用程序而言,通过将其转移到它自己的专用应用程序中,你什么都得不到.

数字3是您在性能关键型服务器类型应用程序中要做的事情,但是使用这种方法获得的最小性能提升是1:非常难以实现,2:非常容易搞砸,3:不是唯一的甚至是最令人信服的理由,人们通常采用这种方法.相反,当人们需要将日志记录服务与使用它的应用程序分离时,人们通常采用这种方法.