2012-05-08 7 views
1

私は、いくつかのスレッド(実際には5つのスレッド)がハングするという特異な状況があります。その理由は、セマフォを待っていて、それをつかむことができないからです。 ipcs -pは、そのセマフォを持つタスクを表示しません。 ipcs -s -iは5のカウントを示します。セマフォーがロックしていない理由を見つける方法

したがって、これら5つのスレッドでセマフォーロックが発生していない理由を知るにはどうすればよいですか?スレッドがこのセマフォを保持しているかどうか

(コールスタックを分析するには、私はすべてのタスクがセマフォを持つ参照couldntの。)

は助けに感謝!

+0

セマフォ関連のシステムコールごとにエラーをチェックしていますか? (semop、semgetなど)IIRC、EINTR errnoおよびそれに関連するシグナルを正しく処理する必要があります。デッドロックすることもできます。 Informix + Tuxedoを使用して、今年の初めに頻繁に出現していました。 – JimR

+0

リターンコードを確認しています。しかし、これはレガシーコードであり、可能性のあるバグを確認するためにこのコードを詳しく調べる必要があります – Manoj

答えて

1

どのセマフォが使用されているのか、どのスレッドが使用されているのかを指定するセマフォ関数の前後に、セマフォの使用についていくつかのデバッグコードを記述します。また、コードにデッドロックがないことを確認するために、再度チェックします。これは、排他ロックを獲得するために同じ順序でさまざまなセマフォを使用し、ロックを解放するために逆の順序を使用することを確実にします。

これ以外にも、私はコードなしであなたに与えることができます。

+0

この特定のセマフォは、4つのポーラースレッドとHWアクセス前のメインスレッドで使用されます。したがって、これは呼び出しの終点のようなものです。したがって、これ以降に他のsem/mutex呼び出しはありません。 – Manoj

+0

また、それは0.5と1秒のポーラーを持っているので、いくつかのプリントを追加することは実現可能ではなく、問題が起こらないためタイミングを捨てます。 – Manoj

+0

コールスタック(OPで言及されているように)を確実に分析すると、タイミングが遅れます。どのように失敗しているHWをある程度エミュレートするものを作成し、その部分をテストケースとして実行するのはどうでしょうか? –

関連する問題