假设多个线程周期性地执行DoWork()
下面的方法。假设在某个时刻,两个线程几乎同时开始执行此方法,因此两个本地时间戳对象中的一个比另一个大一个刻度。
ICollection collection = // ...
public void DoWork()
{
DateTime timestamp = DateTime.Now;
lock(collection.SyncRoot)
{
// critical section
}
}
如果线程 A 的特征是时间戳等于t1,而线程 B 的特征是时间戳t2等于t1 + 1 tick,那么线程 A 将首先需要访问临界区。
.NET 如何管理多线程对临界区的访问?它是否将访问请求放入队列中,以便它们按时间顺序排列?也就是说,是否按照线程访问请求的顺序来保证对临界区的访问?