你如何确定一个循环是一个无限循环并且会突破它。
有没有人有这个算法或者可以帮我解决这个问题。
由于
答案 0 :(得分:8)
没有一般案例算法能够确定某个程序是否处于无限循环中,而不是每个turing complete语言,这基本上是Halting Problem。
证明这一点的想法很简单:
A
。B
,在[{1}}]上自行调用A
。B
回答“程序将停止” - 执行无限循环A
答案A
没有停止] - 暂停停止现在,假设您在B
上调用A
- 答案肯定是错误的,因此B
不存在。
注意:上述内容并非正式证据,只是草图。
答案 1 :(得分:5)
正如其他人所写,无法确定。
但是,如果您想进行一些检查,可以使用WatchDog设计模式。 这是一个单独的线程,用于检查任务是否仍处于活动状态。你自己的线程应定期发出信号说它还活着。确保此信号未在(无限)循环内设置。
如果没有信号,程序在无限循环内或已停止,看门狗可以对其进行操作。