fprintfはスレッドセーフですか? The glibc manualはそうだと言えますが、fprintf()を一度呼び出すだけでファイルに書き込む私のアプリケーションは、異なるプロセスからの部分書き込みを混在させるようです。glibcのfprintf()の実装はスレッドセーフですか?
編集:問題のプログラムはlighttpdプラグインであり、サーバーは複数のワーカースレッドで実行されています。
ファイルを見ると、いくつかの書き込みが混在しています。
編集2:私が見ている問題が原因のlighttpdの「ワーカースレッド」は、実際に独立したプロセスであることにあるかもしれないようだ。http://redmine.lighttpd.net/wiki/lighttpd/Docs:MultiProcessor
問題
2つの以上のプロセスを実行することで 同じソケット上で、あなたはより良い 並行性を持つことになりますが、あなたは を認識する必要があり、いくつかの の欠点があります:
を0
- mod_accesslogは、同じファイルが2回開いて同期されないため、壊れたアクセスログを作成することがあります。
- mod_statusには、それぞれ プロセスごとに1つずつ、n個のカウンタがあります。
- mod_rrdtoolは同じタイムスタンプを2回受信すると失敗します。
- mod_uploadprogressは正しいステータスを表示しません。複数のスレッドからの書き込みと複数のプロセスからの書き込み -
'fprintf'で書いたファイルでこれを観察していますか?これを' stdout'と 'stderr'ストリームで観察していますか? –