c# – 哪个线程是第一个进入临界区的?

c# – 哪个线程是第一个进入临界区的?,第1张

概述假设多个线程定期执行下面的DoWork()方法.假设在某个时刻,两个线程几乎同时开始执行此方法,因此两个本地时间戳对象中的一个比另一个更大. ICollection collection = // ...public void DoWork(){ DateTime timestamp = DateTime.Now; lock(collection.SyncRoot) 假设多个线程定期执行下面的DoWork()方法.假设在某个时刻,两个线程几乎同时开始执行此方法,因此两个本地时间戳对象中的一个比另一个更大.
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# – 哪个线程是第一个进入临界区的?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1249252.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存