使用多线程锁定/监视



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

现在,thread A解锁对象。下面哪个线程(B还是C)会被选中?它是如何确定的?

简短的回答是,它是不确定的——也就是说,你永远不会知道。

中等的答案是等待获得锁的线程被放在"就绪队列"中,这是FIFO,但你不能依赖它。

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

那么,回到简短的答案:你永远不会知道。

应该是第一个尝试获得锁的程序(就像队列一样),查看更多

最新更新