fprintf线程安全吗?glibc手册似乎是这样说的,但我的应用程序使用单个fprintf()调用写入文件时,似乎会混杂来自不同进程的部分写入。编辑:为了澄清,涉及的程序是一个lighttpd插件,服务器正在运行多个工作线程。查看文件,一些写入是混杂在一起的。编辑2:看起来我看到的问题可能是由于lighttpd的“工作线程”实际上是单独的进程导致的:http://redmine.lighttpd.net/wiki/lighttpd/Docs:MultiProcessor
问题
在同一个套接字上运行两个或更多进程,可以获得更好的并发性,但需要注意以下一些缺点:
- mod_accesslog 可能会创建损坏的访问日志,因为同一个文件被打开两次并且没有进行同步。
- mod_status 将有n个独立的计数器,每个进程设置一个。
- mod_rrdtool 将失败,因为它会收到相同的时间戳。
- mod_uploadprogress 不会显示正确的状态。
fprintf
写入文件时观察到这个问题,还是在stdout
和stderr
流中观察到的? - Craig S