7

私はC#でマルチスレッドを学んでいて、以下のコードを見ました

static readonly object _locker = new object();

static void Main()
{
  lock (_locker)
  {
     AnotherMethod();
     // ...some work is going on
  }
}

static void AnotherMethod()
{
  lock (_locker) { Console.WriteLine ("Another method"); }
}

ネストされたロックを使用する必要があるのはいつですか?この場合、なぜ1つのロックだけを使用しないのですか?

4

2 に答える 2

4

私の最初の応答は、 Main メソッドを経由せずに AnotherMethod を直接呼び出すことができるということです。そのため、ネストされたロックが必要になる場合があります。

于 2012-11-22T10:27:35.910 に答える
1

再入可能なコードを許可します。

あなたの例は適切ではありません。ロックは、クリティカルセクションへの制御されたアクセスを提供するために使用されます。

あるクリティカルセクションが別のクリティカルセクションを呼び出すと、デッドロックが発生します。これを防ぐために、再入可能なコードが許可されています。

ネストされたロックがデッドロックを引き起こさないのはなぜですか?

于 2012-11-22T10:35:39.817 に答える