ICollection collection = // ...public voID DoWork(){ DateTime timestamp = DateTime.Now; lock(collection.SyncRoot) { // critical section }}
如果线程A的特征在于时间戳等于t1,而线程B的特征在于时间戳t2等于t1 1 tick,则线程A将首先需要访问临界区.
.NET如何通过多个线程管理对关键部分的访问?它是否将访问请求放入队列中,以便它们按时间顺序排列?换句话说,是否根据线程访问请求的顺序保证对关键部分的访问?
解决方法 绝对不保证线程执行的顺序以及首先获得关键部分的线程.请注意,即使线程的优先级也不能保证顺序 – 不同的内核/ cpu可以在完全相同的时间执行不同优先级的线程,并且任何线程都可以首先到达并获得关键部分.
注2:线程也可以在任意时刻被调度执行/等待,因此同一线程中的两个不同 *** 作彼此相邻的事实并不意味着它们将一个接一个地执行而没有延迟.在你的情况下,这意味着一旦获得时间戳就可以停止线程A,并且稍后安排执行的线程B将很容易得到更晚的时间戳但是首先进入关键部分.
总结以上是内存溢出为你收集整理的c# – 哪个线程是第一个进入临界区的?全部内容,希望文章能够帮你解决c# – 哪个线程是第一个进入临界区的?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)