程序进行逻辑处理的过程中,不能信任上游传入的数据,在对这些数据进行逻辑处理时,可能导致死循环,从而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)每循环一次计数器加一,每次循环对计数器进行判断,如果超出正常循环,记录日志,跳出循环。
次方法简单、粗暴、可依赖,实际工程中屡试不爽。
评论关闭。