0

私のプログラムには、メイン スレッドと多数の子スレッドがあり、これらのスレッドは、特に同じログ ファイルに書き込みます。1 日に 1 回、メイン スレッドはログ ファイルが大きすぎるかどうかをチェックし、アーカイブして閉じ、圧縮します。子スレッドは、ログに書き込みたいときに、ファイルの fd が null でないかどうかをチェックします。有効な場合はログへの書き込みに進み、有効でない場合は新しいログ ファイルを開始します。問題は、並行性のために、子スレッドがブルームーンで fd を取得すると、すべてが正常に見えますが、その後中断され、メインスレッドがファイルをアーカイブし、子スレッドが実行を再開して書き込みを試みるまでにログ、fd が無効になり、segfault が発生します。では、これにアプローチする最良の方法は何ですか?メイン スレッドと log_write を実行する子スレッドの部分で同じミューテックスを使用することを考えました。これで解決するはずですが、複数の子スレッドが同時に log_write を実行するのを防ぎたくありません。確かに、ログは少し混乱しているかもしれませんが、今のところこれは問題ではありません。ログのアーカイブ処理が開始された後に、子スレッドがログへの書き込みを開始するのを防ぐメカニズムが必要なだけです。これはセマフォの場合のように思えますか?

4

0 に答える 0