3

プロセス 1 がリソース Aをロックしてリソース Bを待機し 、同時に (「適切な」場所でのコンテキストの切り替えにより) プロセス 2 がリソース Bをロックし、リソース Aへのアクセスを待機すると、デッドロックが発生します。

Unix はこのようなデッドロックにどのように対処しますか? ここで以下を読みました。

多くのデッドロックは、複数のリソースをロックするすべてのプロセスが同じ順序でロックするように要求するだけで防ぐことができます (たとえば、ロック名のアルファベット順)。

実行順序を変更せずにロックを取得する順序を変更するにはどうすればよいでしょうか? 現代の Unix カーネルが採用しているデッドロック処理へのアプローチについて詳しく説明してくれる人はいますか?

4

2 に答える 2

3

Linux カーネルの場合、これを修正する方法がわからないため、これを処理しません。代わりに、実行時にこの種のデッドロックを検出し、文句を言います。

使用するテクノロジーは、ランタイム ロックの正確性検証ツールである lockdep です。詳細については、カーネル ドキュメントDocumentation/lockdep-design.txtを参照してください。

于 2012-12-08T07:17:03.020 に答える
2

いいえ、OS によって順序を変更することはできません。このフレーズは次のように読む必要があります。「プログラマーが分別があり、競合するすべてのエンティティでリソースを同じ順序でロックする場合、多くのデッドロックは不可能になるでしょう」.

于 2012-12-01T11:00:34.897 に答える