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

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

你知道解决方案吗?

最佳答案

我认为您的陈述是错误的:使用互斥锁不一定等效于同步解决方案。是的,互斥锁用于同步控制,但可用于许多不同的事物。例如,当日志仍然异步发生时,我们可以在生产者使用者队列中使用互斥锁。

坦白地说,我没有研究这些日志库的实现,但是创建一个异步附加程序(对于lib4之类的log4j)应该是可行的,该附加程序由记录程序写入生产者使用者队列,而另一个工作线程负责写入文件(或甚至委托(delegate)给另一个附加程序)(如果未提供的话)。

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

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

10-15 06:26