私は複数のワーカースレッドを持つCプログラムを持っています。定期的に(0.2秒ごとに)いくつかの基本的なチェックが行われている(つまり、スレッドが終了している、シグナルが受信されているなどの)メインスレッドがあります。それぞれのチェックで、スレッドのいずれかがログバッファに持つ可能性のあるデータをログファイルに書き込んで、単一のログファイルに書きたいと思います。Cの複数のスレッドの効率的なロギングソリューション
私の最初のアイデアは、単にログファイルを開いて、すべてのスレッドからデータを書き込んでからもう一度閉じることでした。私はこれらのチェックが0.2秒ごとに発生するので、これがオーバーヘッドすぎるかもしれないと心配しています。
私の質問です - このシナリオは非効率ですか?
もしそうなら、誰かがより良い解決策を提案できますか?
私は、ファイルディスクリプタを開いたままにして、すべてのチェックに新しいデータを書き込むことを考えましたが、何らかの形で物理ファイルが削除されても、プログラムはわかりません(再チェックせずにファイルをもう一度開くだけです)、ログデータは失われます。
(このプログラムは、時間の非常に長い期間のために実行するように設計されているので、ログファイル事実がある時点で削除されます基本的にローテーションをログによる保証されている。)
( ) 'を実行し、syslogデーモンにファイルの書き込みをさせますか? –
デーモン自体はsyslogを使用していますが、実際には、それぞれのスレッドで作成されたサブプロセスのSTDOUTとSTDERRを収集するために、実際には別々のログが必要でした。 – SlappyTheFish