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