6

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

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

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

4

2 回答 2

16

不幸的是,来自 glog 文档的“原始日志”信息具有误导性。raw_logging 是 GLOG 中一种功能减少的日志记录机制,对于容易出现死锁或其他可能的重入情况的情况很有用。

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

  • glog 竭尽全力为每个 LOG 行构造一个新的、唯一的日志对象,以防止两个不同线程之间的输出交错(如 fwrite() 或 write() 可能发生的情况)
  • glog 在将完成的日志行排队到日志接收器时采用互斥锁。
  • glog 要求日志接收器是线程安全的。
于 2012-11-09T00:15:06.087 回答
3

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

原始记录

头文件可用于线程安全的日志记录,它不分配任何内存或获取任何锁。因此,这个头文件中定义的宏可以被底层内存分配和同步代码使用。详情请查看 src/glog/raw_logging.h.in。

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

于 2012-07-13T19:54:48.503 回答