1

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

现在,thread A解锁对象。接下来将选择哪个线程(B 或 C)?它是如何确定的?

4

2 回答 2

5

简短的回答是它是不确定的——即你永远不知道。

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

Asynchronous Procedure Calls长答案是就绪队列中的线程可以“借用”来运行称为 APC(排队 - 但在最后。

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

于 2013-01-19T17:37:04.730 回答
2

它应该是第一个尝试获取锁的(如队列),在此处查看更多信息

于 2013-01-19T17:29:23.830 回答