3

同じミューテックスを取得しようとして単一のプロセス/スレッドがブロックされた場合の状態を「デッドロック」と呼ぶことができますか?

mutex_lock(&mutex)-成功
...
mutex_lock(&mutex)-ブロックされ、ミューテックスは解放されません

「非せん断可能リソース」の条件は当てはまらないようです。これは単一のプロセス/スレッドのみであるため、非せん断可能リソースの保留と待機は発生しません。ここでは単一のプロセスのみであるため、別のプロセスが要求されたリソースを解放するのを待機しません。

4

2 に答える 2

2

はい、それは考慮されているか、または潜在的に*デッドロックにつながる可能性があります。

この用語はスレッドやプロセスにバインドされていませんが、リクエストにバインドされています。

ロック(mutex)が再入可能ではなく、変更時にリソースがロックされ、複数のソースからリソースを変更するのはエラーであると想定します。シングルスレッドプロセスがミューテーション内のデータの新しいミューテーションを開始しようとし、ロックされている非再入可能ロックがロックを要求された場合はどうなりますか?デッドロック

扱っているミューテックスのタイプを正確に指定していないため、「潜在的に」。

于 2012-05-13T10:14:38.617 に答える
2

いいえ、デッドロックではありません。

4つの条件が同時に成立すると、デッドロックが発生する可能性があります。

  • 相互排除:関係するリソースは共有できない必要があります。そうしないと、プロセスが必要なときにリソースを使用できなくなることはありません。特定の時点でリソースを使用できるプロセスは1つだけです。
  • 保留および待機またはリソース保持:プロセスは現在、少なくとも1つのリソースを保持しており、他のプロセスによって保持されている追加のリソースを要求しています。
  • プリエンプションなし:リソースは、それを保持しているプロセスによってのみ自発的に解放できます。
  • 循環待機:各プロセスは、別のプロセスによって保持されているリソースを待機している必要があります。別のプロセスは、最初のプロセスがリソースを解放するのを待機しています。一般に、待機プロセスのセット、P = {P1、P2、…、PN}があり、P1はP2によって保持されているリソースを待機し、P2はP3によって保持されているリソースを待機します。 P1が保持するリソースを待機しています。

もっと...

単一のプロセスでは、循環待機条件が満たされることはありません。したがって、単一のプロセスでデッドロックが発生することはありません。

于 2018-01-21T00:02:29.573 に答える