为什么printf可以掩盖竞争条件,而syslog却没有?

时间:2013-12-26 07:00:31

标签: c++ c linux syslog

我知道printf可以掩盖代码中的竞争条件。但是,我不明白为什么syslog无法掩盖它。人们说syslog类似于发布版本。我们有三种构建变体 - debug(串口调试+ syslog启用),生产(启用syslog)和发布版本(没有串口调试,也没有启用syslog)。人们说尝试生产 - 这使得syslog只能调试问题。我无法理解为什么syslog不会掩盖竞争条件。有人可以解释一下吗?

1 个答案:

答案 0 :(得分:2)

标准的stdio函数(例如printf)执行锁定是线程安全的,因此包含对printf的调用的多线程代码可以在某种程度上被序列化。这可以改变具有竞争条件的代码行为。 (对于某些stdio函数的非锁定版本,您可以查看“unlocked_stdio”的手册页。在某些情况下,使用其中一个可能会产生令人惊讶的大型性能差异。)

我对syslog不熟悉。据我所知,某些版本的syslog不进行任何锁定,不是线程安全的,并且不会导致相同的序列化,但Linux syslog实现是< / em>线程安全,并且应该导致与printf类似(但可能不完全相同)的序列化。

所以根据我的理解,“人”是错误的。