Windows .net线程 - 可以长时间饿死吗?

时间:2012-10-13 00:14:14

标签: multithreading

.net中是否有可能长时间阻塞线程超过10秒? 或.net或Windows在线程之间切换以确保它们被执行?

1 个答案:

答案 0 :(得分:2)

如果线程调用阻塞操作,可以长时间阻塞线程,例如等待事件触发:

  evt.WaitOne();

或尝试访问关键部分:

  lock( _myLockObject )
  {
     // ...
  }

在这些情况下,你的线程已经放弃了控制权,并且处理器致力于让其他线程运行。

但也许你在问一个线程是否可以被饿死?在所有正常情况下,答案是“不” - 操作系统确保所有线程都获得处理器的一部分。如果一个非常高优先级的线程在循环中搅拌可能会有异常,但即使这样,操作系统也不应该完全饿死其他线程。

如果你看到一个没有长时间间隔进展的线程(比如10秒)那么其他东西可能就错了。它可能正在执行隐式阻止(或者甚至可能是死锁)的操作,或者在创建后可能永远不会实际启动。