0

MSDN によると、lock を使用することは monitor を使用することと同等ですが、より簡潔でエラーが発生しにくいとのことです。

簡単な (単一プロセスの) 例を教えてMonitorくださいlock

4

1 に答える 1

5

簡単な(単一のプロセス)例を教えてください。ロックが不十分なときにモニターを使用せざるを得ないのはなぜですか。

もちろん。ロックを取得できる場合にアクションを実行したいが、他のオブジェクトがすでにロックを所有している場合は、特定の時間より長くブロックしたくないとします。

bool gotMonitor = false;

try
{
    Monitor.TryEnter(monitor, 500, ref gotMonitor);
    if (gotMonitor)
    {
        // Okay, we're in the lock. We can do something useful now.
    }
    else
    {
        // Timed out - do something else
    }
}
finally
{
    if (gotMonitor)
    {
        Monitor.Exit(monitor);
    }
}

(私は意図的にオーバーロードを使用していないことに注意してください。オーバーロード は成功/失敗を返すだけです。パラメーターの設定はロック取得に関してアトミックであるため、使用しているバージョンの方が信頼性が高くなります。)TryEnterref

于 2013-02-22T10:38:49.590 に答える