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