说我有三个线程需要访问一个集合,我在每个线程的访问周围使用一个锁定块。出现以下情况...锁定陈述C#
(1)线索1沾到集合锁
(2)线程2被阻断
(3)线3堵塞
当线程1释放锁,谁会接下来的锁?它是否是FIFO访问?
谢谢
说我有三个线程需要访问一个集合,我在每个线程的访问周围使用一个锁定块。出现以下情况...锁定陈述C#
(1)线索1沾到集合锁
(2)线程2被阻断
(3)线3堵塞
当线程1释放锁,谁会接下来的锁?它是否是FIFO访问?
谢谢
你不应该在乎谁下一个锁。
假设它像Win32那么答案是它可能是FIFO,但它可能不是(它是别的东西)。例如,优先级较高的线程应该是第一个;但线程可以暂时提升或降低他们的优先级,这取决于他们最近在做什么。
你的问题意味着你正在寻找一个先进先出的行为?然后,你可能想通过的Jakub Sloup尝试这种代码:
Monitor/lock which remember order in C# to simulate FIFO
正如已经在其他的答案中提到,没有保证的顺序等待的线程将获得锁。
作为您的问题的答案,所有主题都会收到monitor.pulse,然后将争夺下一个获得锁定的人。
我相信wintellect的人写了一篇关于这种行为如何导致不公平的博客的博客,但是在监视器中根本没有公平性。
答案是根据定义,不确定。
你可以扩展说你*不能*关心。也许。 – JMD 2009-02-18 20:39:00
我意识到我应该编程这些线程,以便我不在乎,我只是想知道这个机制是什么。 – 2009-02-18 20:44:26
http://msdn.microsoft.com/en-us/library/aa645740(VS.71).aspx#vcwlkthreadingtutorialexample4mutex “运行样本的机器的速度和操作系统会影响输出顺序。” – 2009-02-18 20:57:31