无限循环:确定和破坏无限循环

时间:2012-03-16 14:00:29

标签: algorithm loops infinite-loop infinite

你如何确定一个循环是一个无限循环并且会突破它。

有没有人有这个算法或者可以帮我解决这个问题。

由于

2 个答案:

答案 0 :(得分:8)

没有一般案例算法能够确定某个程序是否处于无限循环中,而不是每个turing complete语言,这基本上是Halting Problem

证明这一点的想法很简单:

  1. 假设您有这样的算法A
  2. 构建一个程序B,在[{1}}]上自行调用A
  3. 如果B回答“程序将停止” - 执行无限循环
  4. 其他[A答案A没有停止] - 暂停停止
  5. 现在,假设您在B上调用A - 答案肯定是错误的,因此B不存在。

    注意:上述内容并非正式证据,只是草图。

答案 1 :(得分:5)

正如其他人所写,无法确定。

但是,如果您想进行一些检查,可以使用WatchDog设计模式。 这是一个单独的线程,用于检查任务是否仍处于活动状态。你自己的线程应定期发出信号说它还活着。确保此信号未在(无限)循环内设置。

如果没有信号,程序在无限循环内或已停止,看门狗可以对其进行操作。