私はCコードで書かれた2つのスレッドを作成し、Linux OS上で実行しています。どちらのスレッドも何らかの仕事をしていて、その親プロセスが生きている間永久に実行されています。それらのスレッドを作成しスレッドがデッドロック状態にあるかどうかを知る方法?
プロセスは、いくつかの間隔でsystemd
にウォッチドッグ通知を送信しています。ただし、ウォッチドッグ通知を送信する前に、すべてのスレッドが非デッドロック状態にあるかどうかを確認する必要があります。
スレッドがデッドロック状態になっていないことを知るために、どのようなシステムコールを使用することができるか、どのようなメカニズムを使用することができるのか、プロセスが作成したスレッドがデッドロック状態かどうかをチェックし、すべてのスレッドが非デッドロック状態にある場合は、ウォッチドッグ通知をsystemd
に送信します。
スレッドは、システムリソースを獲得する親スレッドのタイムスタンプを保存しようとしている手順1で開始したループを続けます。スレッドがシステムリソースを取得すると、タイムスタンプは無効になります。親スレッドがタイムスタンプをいくつかの制限より古いと判断した場合は、システムがデッドロックしていると宣言できます。 – user3386109
親スレッドのタイムスタンプを保存することはどういう意味ですか?子スレッドがシステムリソースを取得しようとしていることを親スレッドがどのように知るか。 –
OSはこれを効果的な方法で判断できません。そのようなチェックをあなたのアプリデザインに組み込む必要があります。あなたがそれを望むならば、それをデザインすることができます。 –