锁语句C#
假设我有三个线程需要访问一个集合,并且我在每个线程的访问周围使用了一个锁块。发生了以下情况 (1) 线程1获得集合的锁锁语句C#,c#,locking,C#,Locking,假设我有三个线程需要访问一个集合,并且我在每个线程的访问周围使用了一个锁块。发生了以下情况 (1) 线程1获得集合的锁 (2) 线程2被阻塞 (3) 线程3被阻塞 当线程1释放锁时,下一个谁来获取锁?它是先进先出的吗 谢谢你不应该关心谁下一个得到锁。假设它像Win32,那么答案是它可能是FIFO,但可能不是(它是其他东西)。例如,优先级较高的线程应该是第一个线程;但是线程的优先级可能会暂时提高或降低,这取决于它们最近所做的事情。您的问题意味着您正在寻找FIFO行为?然后,您可能希望通过Jakub
(2) 线程2被阻塞
(3) 线程3被阻塞 当线程1释放锁时,下一个谁来获取锁?它是先进先出的吗
谢谢你不应该关心谁下一个得到锁。假设它像Win32,那么答案是它可能是FIFO,但可能不是(它是其他东西)。例如,优先级较高的线程应该是第一个线程;但是线程的优先级可能会暂时提高或降低,这取决于它们最近所做的事情。您的问题意味着您正在寻找FIFO行为?然后,您可能希望通过Jakub Sloup尝试以下代码:
正如其他答案中已经提到的,没有保证订单等待线程会收到锁。作为对您问题的回答,所有线程都会收到monitor.pulse,然后它将争夺谁下一个获得锁
我相信wintellect的员工写了一篇关于这种行为如何可能导致不公平情况的博客,但是监视器中根本没有公平。答案是根据定义,不确定。你可以扩展到说你不在乎。也许吧。我意识到我应该对线程进行编程,这样我就不在乎了,我只是想知道机制是什么。“运行样本的机器的速度和操作系统会影响输出顺序。”据我所知,这是正确的。锁可以被认为是FIFO,但不能保证。