soc*_*ket 1 .net c# multithreading locking monitor
在.NET中,假设thread A锁定一个对象.同时,thread B与thread C被阻塞并等待对象由被解锁thread A.
thread A
thread B
thread C
现在,thread A解锁了对象.接下来会选择哪个线程(B或C)?怎么决定?
Nic*_*ler 5
简短的回答是它是非确定性的 - 即你永远不会知道.
中等答案是等待获取锁的线程被放入"就绪队列",即FIFO,但你不能依赖它.
很长的答案是,就绪队列中的线程可以"借用"来运行称为APC的小块工作(Asynchronous Procedure Calls)当发生这种情况时,它们会在队列中失去位置,当APC完成时,它们会被放回准备状态队列 - 但最后.
Asynchronous Procedure Calls
所以,回到简短的回答:你永远不会知道.
归档时间:
13 年,4 月 前
查看次数:
229 次
最近记录: