gpt4 book ai didi

c++ - C++ 中的异步线程安全日志记录(无互斥量)

转载 作者:可可西里 更新时间:2023-11-01 18:09:29 27 4
gpt4 key购买 nike

我实际上正在寻找一种在我的 C++ 中执行异步和线程安全日志记录的方法。

我已经探索过线程安全的日志记录解决方案,例如 log4cpp、log4cxx、Boost:log 或 rlog,但它们似乎都使用了互斥量。据我所知,互斥锁是一种同步解决方案,这意味着所有线程在尝试写入消息时都被锁定,而其他线程则这样做。

你知道解决办法吗?

最佳答案

我认为你的说法是错误的:使用互斥量不一定等同于同步解决方案。是的,Mutex 用于同步控制,但它可以用于许多不同的事情。我们可以在例如生产者消费者队列中使用互斥锁,而日志记录仍在异步发生。

老实说,我没有研究过这些日志库的实现,但是制作一个异步附加程序(对于像 lib 的 log4j)应该是可行的,记录器写入生产者消费者队列,另一个工作线程负责写入一个文件(甚至委托(delegate)给另一个附加程序),以防未提供。


编辑:刚刚在 log4cxx 中进行了简短扫描,它确实提供了一个 AsyncAppender,它执行我的建议:缓冲传入的日志记录事件,并异步委托(delegate)给附加的附加程序。

关于c++ - C++ 中的异步线程安全日志记录(无互斥量),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8150249/

27 4 0