【发布时间】:2022-01-07 01:05:56
【问题描述】:
我问了一个关于如何在多进程中使用 boost::log 的问题 How to use Boost::log not to rewrite the log file?
这个答案可以解决大部分问题。但是在极少数情况下,当一个进程正在写日志而另一个进程开始写日志时,
13548:Tue Nov 30 17:33:41 2021
12592:Tue Nov 30 17:33:41 2021
13548:Tue Nov 30 17:33:41 2021
12592:Tue Nov 30 17:33:4572:Tue Nov 30 17:33:41 2021
17196:Tue Nov 30 17:33:41 2021
8572:Tue Nov 30 17:33:41 2021
17196:Tue Nov 30 17:33:41 2021
8572:Tue Nov 30 17:33:41 2021
第四行17:33:4(1 2021)后面的部分被另一个进程写入的(8)572:Tue Nov擦除了。
如何防止这种情况发生?
【问题讨论】:
-
听起来您在上一个问题中使用的宏不是线程安全的。尝试创建自己的记录器并使用它线程安全而不使用此宏。如需更多阅读,您可以查看此链接 (boost.org/doc/libs/1_56_0/libs/log/doc/html/log/tutorial/…)
-
@jonathan, boost::log 应该是线程安全的(宏,写日志部分是线程安全的。)只是启动另一个进程是不安全的。