为什么 printf 可以屏蔽竞争条件,而系统日志不能?
Why printf can mask the race-condition whereas syslog doesn't?
我知道printf可以掩盖代码中的竞争条件。但是,我不明白为什么系统日志无法掩盖它。人们说系统日志类似于发布版本。我们有三种构建变体 - 调试(串行调试 + 启用系统日志)、生产(启用系统日志)和发布构建(没有串行调试和未启用系统日志)。人们说尝试生产 - 即仅启用系统日志来调试问题。我不明白为什么系统日志不会掩盖竞争条件。有人可以解释一下吗?
标准 stdio 函数(如 printf)执行锁定是线程安全的,因此包含对 printf 调用的多线程代码可以在某种程度上序列化。这可以更改具有争用条件的代码的行为。(您可以在手册页中查看"unlocked_stdio",了解某些 stdio 函数的非锁定版本。在某些情况下,使用其中一个可能会产生惊人的巨大性能差异。
我对系统日志不太熟悉。据我所知,某些版本的 syslog 不执行任何锁定,不是线程安全的,并且不会导致相同的序列化,但 Linux syslog 实现是线程安全的,应该会导致与 printf 类似(但可能不完全相同)的序列化。
所以根据我的理解,"人"是错的。
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的for循环不能正确获取argv
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么模板类中的对象不能返回值
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 数组长度,为什么从命令行获取时不能使用它?
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 16 位系统中的程序如何访问大于 65535 的整数,但不能访问地址
- 系统日志不转发远程消息
- 该程序不会在任何地方打印系统日志?
- 为什么 printf 可以屏蔽竞争条件,而系统日志不能?
- OpenCV videoccapture在Windows 7 32位系统中不能读取任何视频文件
- c++不能在当前系统时间和日期之后命名txt文件
- 为什么visual express 2008不能自动完成std::系统