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

Pan*_*pta 4 algorithm loops infinite infinite-loop

你如何确定一个循环是一个无限循环,并将突破它.

有没有人有这个算法或可以帮助我这个.

谢谢

ami*_*mit 8

没有一般案例算法可以确定程序是否在每个图灵完整语言的无限循环中,这基本上是停止问题.

证明它的想法很简单:

  1. 假设你有这样的算法A.
  2. 构建一个B自己调用的程序A[on B].
  3. 如果A答案"程序将停止" - 做一个无限循环
  4. 否则[ A答案B不会停止] - 立即停止

现在,假设你调用AB-答案是definetly错误,因此A不存在.

注意:以上内容并非正式证明,只是草图.

  • @PankajGupta:如果我没有记错 - 对于每个程序`A`,有一个程序`B`可以确定`A`是否会停止.没有**一般情况**算法,可以确定程序是否停止 - 对于**所有程序**. (3认同)

Mic*_*ers 5

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

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

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