1

いくつかのスレッド (実際には 5 つのスレッド) がハングするという特殊な状況があります。その理由は、セマフォを待っていて、それを取得できないためです。ipcs -p は、そのセマフォを持つタスクを表示しません。ipcs -s -i は 5 のカウントを示します。

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

(コールスタックを分析したところ、セマフォを持つタスクは見当たりませんでした。)

助けてくれてありがとう!

4

1 に答える 1

1

セマフォの使用に関するデバッグ コードを記述します (つまり、どのセマフォが使用され、どのスレッドが使用されているかを指定するセマフォ関数の前後に)。さらに、コードにデッドロックがないことを再確認します。これは、さまざまなセマフォを同じ順序で使用して相互排他ロックを取得し、逆の順序でロックを解除することを保証することで簡単に実現できます。

それを除けば、コードなしで提供できるヘルプはほとんどありません。

于 2012-05-08T05:03:31.337 に答える