假设我有三个需要访问集合的线程,并且我在每个线程的访问周围使用了一个锁块。发生以下情况......
(1)线程1获取集合上的锁定
(2)线程2被阻止
(3)线程3被阻止
当线程1释放锁定时,谁可以接下来锁定?它是FIFO访问吗?
由于
答案 0 :(得分:17)
你不应该关心谁接下来锁定。
答案 1 :(得分:5)
您的问题意味着您正在寻找FIFO行为?然后你可能想尝试Jakub Sloup的这段代码:
<强> Monitor/lock which remember order in C# to simulate FIFO 强>
正如其他答案中已经提到的,没有保证订单等待线程会收到锁定。
答案 2 :(得分:4)
假设它像Win32那么答案是它可能是FIFO但它可能不是(它是其他东西)。例如,优先级较高的线程应该是第一个;但线程可以暂时提升或降低优先级,具体取决于他们最近在做什么。
答案 3 :(得分:4)
作为对你的问题的回答,所有线程都接收到monitor.pulse,然后将争夺下一个获得锁定的人。
我相信wintellect的人写了一篇关于这种行为如何导致不公平情况的博客,但监视器中根本没有公平。
答案 4 :(得分:3)
答案是定义,不确定。