文章目录 背景代码模拟编译执行后输出结果分析结论
背景
某天客户反馈程序cpu占用99%,要求分析出问题,经排查发现是由于nanosleep函数使用不当导致
代码模拟 #include <time.h>#include <stdio.h>int count;void do_printbuf(){ count++; printf("do print buf called %dn",count);}int main(){ struct timespec s_time,ostime; s_time.tv_sec = 0; s_time.tv_nsec = 1000 * 1000 * 1000;//故障行 //s_time.tv_nsec = 10 *1000*1000; while(1) { do_printbuf(); printf("tv_nsec %ld,sizeof %dn",s_time.tv_nsec,sizeof s_time.tv_sec); nanosleep(&s_time,&ostime);//故障行 } return 0;} 编译执行后输出结果 do print buf called 47938tv_nsec 1000000000,sizeof 8do print buf called 47939tv_nsec 1000000000,sizeof 8do print buf called 47940tv_nsec 1000000000,sizeof 8do print buf called 47941tv_nsec 1000000000,sizeof 8do print buf called 47942 分析编译执行后,可以看出s_time.tv.nsec正常打印并没有发生溢出的问题,但是现象表明当tv_nsec中第一个乘数为10时程序执行缓慢,100时变的更慢一点点,1000时程序疯狂打印.
查看man 手册