【发布时间】:2009-02-27 13:56:54
【问题描述】:
fprintf 是线程安全的吗? The glibc manual 似乎是这样说的,但是我的应用程序,它使用对 fprintf() 的单次调用写入文件,似乎混合了来自不同进程的部分写入。
编辑:澄清一下,有问题的程序是一个lighttpd 插件,并且服务器使用多个工作线程运行。
查看文件,有些写入是混合在一起的。
编辑 2:看来我看到的问题可能是由于 lighttpd 的“工作线程”实际上是单独的进程:http://redmine.lighttpd.net/wiki/lighttpd/Docs:MultiProcessor
问题
通过在 同样的插座你会有更好的 并发,但会有一些 您必须注意的缺点 的:
- mod_accesslog 可能会创建损坏的访问日志,因为同一个文件打开了两次并且未同步。
- mod_status 将有 n 个单独的计数器,每个计数器一组 过程。
- mod_rrdtool 将失败,因为它两次收到相同的时间戳。
- mod_uploadprogress 不会显示正确的状态。
【问题讨论】:
-
您是在使用
fprintf编写的文件中观察到这一点,还是在stdout和stderr流中观察到这一点?
标签: c multithreading posix lighttpd printf