在 .NET 中,假设thread A
锁定了一个对象。同时,thread B
和thread C
被阻止并等待对象被 解锁thread A
。
现在,thread A
解锁对象。接下来将选择哪个线程(B 或 C)?它是如何确定的?
在 .NET 中,假设thread A
锁定了一个对象。同时,thread B
和thread C
被阻止并等待对象被 解锁thread A
。
现在,thread A
解锁对象。接下来将选择哪个线程(B 或 C)?它是如何确定的?
简短的回答是它是不确定的——即你永远不知道。
中等答案是等待获取锁的线程被放入“就绪队列”,即 FIFO,但您不能依赖它。
Asynchronous Procedure Calls
长答案是就绪队列中的线程可以“借用”来运行称为 APC(排队 - 但在最后。
所以,回到简短的回答:你永远不知道。
它应该是第一个尝试获取锁的(如队列),在此处查看更多信息