加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 10:18:43 所属栏目:百科 来源:网络整理
导读:通常开发我用于打印到控制台的应用程序,以获得有用的调试/跟踪信息.我正在使用的应用程序,因为它是多线程的,有时我看到我的printf相互重叠. 我尝试使用互斥锁同步屏幕,但我最终放慢速度并阻止应用程序.如何解决这个问题? 我知道MT日志库,但在使用它们时,由
通常开发我用于打印到控制台的应用程序,以获得有用的调试/跟踪信息.我正在使用的应用程序,因为它是多线程的,有时我看到我的printf相互重叠.

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

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

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

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

谢谢

AFG

解决方法

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读