一种简单检测与破除死循环的方法

程序进行逻辑处理的过程中,不能信任上游传入的数据,在对这些数据进行逻辑处理时,可能导致死循环,从而CPU99%,占满计算资源。

有一种简单、粗暴、可依赖的方法能够检测与破除死循环,伪代码如下:

//...

//不妨设正常逻辑循环处理次数一定小于此值
#define MAX_WHILE_COUNT (10000)
uint32_t count=0;
while(A && B && C && ... )
{
  //正常逻辑处理
  if(count >= MAX_WHILE_COUNT)
  {
    // write log
    break;
  }
  ++ count;
}

//...

简要说明:
(1)定义一个正常逻辑都不可能超出次循环次数的值,如MAX_WHILE_COUNT=10000;
(2)运行逻辑前定义一个计数器count=0;
(3)A,B,C是正常逻辑判断循环的条件;
(4)在上游输入数据有问题的情况下,A,B,C条件可能恒真,导致死循环;
(5)每循环一次计数器加一,每次循环对计数器进行判断,如果超出正常循环,记录日志,跳出循环。

次方法简单、粗暴、可依赖,实际工程中屡试不爽。



评论关闭。