は、glibcの実施fprintf()スレッド安全ですか?
-
09-09-2019 - |
質問
はfprintfスレッド安全ですか? のglibcマニュアル いっているようですが、私のアプリケーションに書き込みファイルを使用単一の呼び出fprintf()のように混合部分に書き込みから異なるプロセス。
編集:めのプログラムであるという、 lighttpd プラグインのサーバは複数のワーカスレッド)。
のファイルの書き込みは、が交差します。
編集2:この問題を見かけによlighttpdの"ワーカスレッド"からの分離プロセス: http://redmine.lighttpd.net/wiki/lighttpd/Docs:MultiProcessor
問題
走行2つ以上のプロセスの 同じソケットまでより良い 並行処理に参加することによって数 欠点として認識し :
- mod_accesslogを行う壊れたアクセスログとして、同じファイルが開き二度とは同期化されません。
- mod_statusて n 個別カウンターで、設定の各 ます。
- mod_rrdtool失敗を受けることでよい、同じタイムスタンプ。
- mod_uploadprogressションについては正しい状態にします。
解決
きく二つの概念からの書面に複数のスレッドからの書面に複数のプロセス。
中で、その方法を確実にするための一つの呼び出しfprintfが完了したものは次のようにアクセスが許可され、出力バッファがアプリのポンプの出力ファイルだけに左右されます。いくつかの種類のOSに基づくロック機構を誇る全く別のアプリケーションのだが、書き込みログファイルです。
他のヒント
音のように私に必要な読む ファイルのロック.の問題あなたが複数のプロセス(ないスレッド)の文書と同じファイルを同時にがなく信頼を保障するために書き込みする原子.このファイルを上書きする他の書き込みの場合、混合出力は、完全に非決定論的活動しています。
こんまりとしたスレッドの安全性はどこには関係ないだけではなく、プロセスmultithreadingます。
現在のC++の標準とな報の並行処理は、1990年にCます。(私は、1999年にはC標準規格などのコメントする今回のC++0x標準でないものもないわからないなどのoffhand.)
こfprintf()そのものがないスレッドの安全なものなのに、このように実装されます。今を読みなど、glibcの文書"ということと比較することでどんやってます。