Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/301.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
锁语句C#_C#_Locking - Fatal编程技术网

锁语句C#

锁语句C#,c#,locking,C#,Locking,假设我有三个线程需要访问一个集合,并且我在每个线程的访问周围使用了一个锁块。发生了以下情况 (1) 线程1获得集合的锁 (2) 线程2被阻塞 (3) 线程3被阻塞 当线程1释放锁时,下一个谁来获取锁?它是先进先出的吗 谢谢你不应该关心谁下一个得到锁。假设它像Win32,那么答案是它可能是FIFO,但可能不是(它是其他东西)。例如,优先级较高的线程应该是第一个线程;但是线程的优先级可能会暂时提高或降低,这取决于它们最近所做的事情。您的问题意味着您正在寻找FIFO行为?然后,您可能希望通过Jakub

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

(1) 线程1获得集合的锁
(2) 线程2被阻塞
(3) 线程3被阻塞

当线程1释放锁时,下一个谁来获取锁?它是先进先出的吗


谢谢

你不应该关心谁下一个得到锁。

假设它像Win32,那么答案是它可能是FIFO,但可能不是(它是其他东西)。例如,优先级较高的线程应该是第一个线程;但是线程的优先级可能会暂时提高或降低,这取决于它们最近所做的事情。

您的问题意味着您正在寻找FIFO行为?然后,您可能希望通过Jakub Sloup尝试以下代码:


正如其他答案中已经提到的,没有保证订单等待线程会收到锁。

作为对您问题的回答,所有线程都会收到monitor.pulse,然后它将争夺谁下一个获得锁


我相信wintellect的员工写了一篇关于这种行为如何可能导致不公平情况的博客,但是监视器中根本没有公平。

答案是根据定义,不确定。

你可以扩展到说你不在乎。也许吧。我意识到我应该对线程进行编程,这样我就不在乎了,我只是想知道机制是什么。“运行样本的机器的速度和操作系统会影响输出顺序。”据我所知,这是正确的。锁可以被认为是FIFO,但不能保证。