一个简单的问题:
我需要在我的程序中添加一些日志记录。
如果两个进程在同一文件上使用“fwrite”但不是同一文件描述符,则写入的日志消息将是原子的或混合的。有长度限制吗?
是定义了 ANSI-C 行为还是定义了实现?
如果后者在 MacOSX、Linux 和 Windows MSVC 上是什么?
经过一些研究后,我发现了以下内容link http://gcc.gnu.org/onlinedocs/libstdc++/manual/using_concurrency.html:
POSIX 标准要求 C stdio
FILE* 操作是原子的。
符合 POSIX 的 C 库(例如,
Solaris 和 GNU/Linux)有一个
用于序列化操作的内部互斥体
在 FILE* 上。
看起来调用应该是原子的,但这取决于您的平台。在同一链接中,还有另一段让您认为程序员应该小心:
所以,对于 3.0,“是
I/O 的多线程安全”必须是
回答说:“是您平台的 C
I/O 库线程安全?” 有些是
默认情况下,有些不是;许多报价
C的多种实现
具有不同权衡的库
线程安全和效率。你,那个
程序员,总是被要求
小心多线程。
另外,由于您有两个不同的FILE*
在两个不同的过程中,我想你别无选择。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)