複数のスレッドがDoWork()
以下の方法を定期的に実行するとします。ある時点で、2つのスレッドがこのメソッドの実行をほぼ同時に開始し、2つのローカルタイムスタンプオブジェクトの一方が他方よりも1ティック大きいと仮定します。
ICollection collection = // ...
public void DoWork()
{
DateTime timestamp = DateTime.Now;
lock(collection.SyncRoot)
{
// critical section
}
}
スレッドAがt1に等しいタイムスタンプによって特徴付けられ、スレッドBがt1 + 1ティックに等しいタイムスタンプt2によって特徴付けられる場合、スレッドAは最初にクリティカルセクションへのアクセスを必要とします。
.NETは、複数のスレッドによるクリティカルセクションへのアクセスをどのように管理しますか?アクセス要求をキューに入れて、時系列に並べますか?つまり、スレッドアクセス要求の順序に従ってクリティカルセクションへのアクセスが保証されていますか?