.net中是否有可能长时间阻塞线程超过10秒? 或.net或Windows在线程之间切换以确保它们被执行?
答案 0 :(得分:2)
如果线程调用阻塞操作,可以长时间阻塞线程,例如等待事件触发:
evt.WaitOne();
或尝试访问关键部分:
lock( _myLockObject )
{
// ...
}
在这些情况下,你的线程已经放弃了控制权,并且处理器致力于让其他线程运行。
但也许你在问一个线程是否可以被饿死?在所有正常情况下,答案是“不” - 操作系统确保所有线程都获得处理器的一部分。如果一个非常高优先级的线程在循环中搅拌可能会有异常,但即使这样,操作系统也不应该完全饿死其他线程。
如果你看到一个没有长时间间隔进展的线程(比如10秒)那么其他东西可能就错了。它可能正在执行隐式阻止(或者甚至可能是死锁)的操作,或者在创建后可能永远不会实际启动。