2

Mutexクラスの仕組みを理解するのに少し混乱しています。

複数のタスクによって実行されるようなコードがあるとします。

bool lockAcquired = mutex.WaitOne();

try
{
    sharedVar += 1;
}
finally
{
    if (lockAcquired) mutex.ReleaseMutex();
}

私の理解 (間違っている場合は訂正してください) に達した瞬間mutex.WaitOne()、最初に別のスレッドが実行されるのを待っReleaseMutex()てから、後続のステートメントを実行します。try..finallyしたがって、別のスレッドがロックを持っている場合は、ステートメントを続行して実行しません。ロックを取得すると、次のコードの実行に進みます。lockAcquiredその時になりますtrue。私の質問は、ロックが取得されたときにのみ実行される場合、ステートメント内にあるlockAcquiredかどうかを確認する必要があるのはなぜですか。ブロック内のステートメントが常に実行されることを意味します。ありがとう。truefinallyiffinally

4

2 に答える 2

1

documentationによると、戻り値は次のとおりです。

true現在のインスタンスがシグナルを受信した場合。現在のインスタンスが通知されない場合は、WaitOne決して戻りません。

これは、戻り値をチェックしても意味がないことを意味しますfalse

于 2013-07-30T08:57:02.163 に答える
0

lockAcquiredこのコードをチェックインする理由はありません。また、チェックする場合は、ミューテックスが保護する状態を壊す前にチェックする必要があります。

于 2013-07-30T02:16:13.140 に答える