3

Monitor.Enterとの正しい動作について何かが欠けていると思いますMonitor.TryEnter。これは、問題を残りのコードから分離するために私が書いたコードの一部です。

object lockObj = new object();
bool result = Monitor.TryEnter(lockObj);
Console.Write(result);

結果は常にtrueです。ここに驚きはありません。

object lockObj = new object();
Monitor.Enter(lockObj);
bool result = Monitor.TryEnter(lockObj);
Console.Write(result);

でも今回もそうtrueです。それでlockObj、後にロックされているMonitor.Enterかどうか?これを少し見直してください。

4

2 に答える 2

7

これは、同じスレッドでこれを行っているためです。

また、次の点にも注意してください(MSDN):

同じスレッドがブロックせずにEnterを複数回呼び出すことは合法です。ただし、オブジェクトを待機している他のスレッドがブロックを解除する前に、同数のExit呼び出しを呼び出す必要があります

于 2012-06-22T10:26:32.023 に答える
0

すでにモニターを取得している同じスレッドは、常にモニターを再取得することを許可されます(再入力コードを許可するため)。

于 2012-06-22T10:27:15.720 に答える