谷歌日志条目是否由互斥锁包装?

Wes*_*ler 6 c++ google-code glog

使用Google的日志记录库(glog-0.3.2),发送到由互斥锁包装的日志的各个条目是什么?也就是说,其他条目是否可以破坏当前正在保存的条目?

我想这转化为:是glog线程安全吗?

如果记录器设置为回显到控制台以及文件,没有我自己的互斥锁,有没有办法阻止printf/ cout破坏输出LOG()?我怀疑不是,但想知道是否有办法锁定可以包装多个语句的互斥锁.

小智 15

不幸的是,glog文档中的"Raw Logging"信息具有误导性.raw_logging是GLOG中的一种减少功能的日志记录机制,对于容易出现死锁或其他可能的重入情况的情况非常有用.

如果你看一下logging.h和logging.c,你会发现glog中正常的,功能齐全的日志记录也是线程安全的.这是通过以下方式实现的:

  • glog不遗余力地为每个LOG行构建一个新的,唯一的日志对象,以防止两个不同线程之间的输出交错(fwrite()或write()可能会发生)
  • 当glog将完成的日志行排队到日志接收器时,它会获取互斥锁.
  • glog要求日志接收器是线程安全的.


A T*_*A T 3

是的,glog 可以是线程安全的。

原始记录

头文件可用于线程安全日志记录,它不分配任何内存或获取任何锁。因此,该头文件中定义的宏可供低级内存分配和同步代码使用。请检查 src/glog/raw_logging.h.in 了解详细信息。

http://google-glog.googlecode.com/svn/trunk/doc/glog.html