锁定/监视多个线程

时间:2013-01-19 17:25:13

标签: c# .net multithreading locking monitor

在.NET中,假设thread A锁定一个对象。同时,thread Bthread C被屏蔽,并等待thread A解锁对象。

现在,thread A解锁了该对象。接下来会选择哪个线程(B或C)?怎么决定?

2 个答案:

答案 0 :(得分:5)

简短的回答是它是非确定性的 - 即你永远不会知道。

中等答案是,等待获取锁的线程被放入“就绪队列”,即FIFO,但你不能依赖它。

很长的答案是,就绪队列中的线程可以“借用”来运行称为APC的小块工作(Asynchronous Procedure Calls)当发生这种情况时,它们会在队列中失去位置并且当APC完成时,他们被放回准备好的队列 - 但最后。

所以,回到简短的回答:你永远不会知道。

答案 1 :(得分:2)

应该是第一个尝试获取锁定的人(如队列),See more here