锁定声明C#

时间:2009-02-18 20:34:47

标签: c# locking

假设我有三个需要访问集合的线程,并且我在每个线程的访问周围使用了一个锁块。发生以下情况......

(1)线程1获取集合上的锁定
(2)线程2被阻止
(3)线程3被阻止

当线程1释放锁定时,谁可以接下来锁定?它是FIFO访问吗?

由于

5 个答案:

答案 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)

答案是定义,不确定。