0

次のコードがあります。

pthread_mutex lock_row[M], lock_culm[M];
FUNCTION SIGNATURE (..., int i, int j, ...) {
   pthread_mutex_lock(&lock_row[i]);
   pthread_mutex_lock(&lock_culm[j]);
   ...CRITICAL CODE...
   pthread_mute_unlock(&lock_row[j]);
   pthread_mute_unlock(&lock_row[i]);
}

最初のロックと 2 番目のロックの間でデッドロックが発生することはありますか? 最初の行の後にコンテキスト スイッチがあり、他のスレッドが何かを再びロックしようとしたとしましょう。よく分からないのでもう少し詳しく知りたいです。

4

2 に答える 2

1

sth を 2 回ロック解除しようとしたときに発生する可能性のあるタイプミスに加えて、この例ではデッドロックが発生しません。2 つのロック呼び出し間のコンテキストの切り替えは、ここに含まれるメカニズムに脅威を与えません。より高いレベルの手当を取得することと考えてください。ロックを取得するたびに、このプロセスまたはスレッドはさらに多くのことを実行できます。各ロックは、他のロック保持者がより高いレベルへの進入を妨げなくなるまでプロセスを保持するゲートです。2 つのロックの間で何が起こっても、許容レベルが変わらない限り問題ではありません。

于 2013-05-27T00:28:59.620 に答える