SIGALRM信号不要轻易用来设置超时,因为会中断sleep,尤其在多线程程序中,验证如下:
#include <stdio.h>
#include <signal.h>
void alarm_handler(int signo)
{
return;
}
int main()
{
signal(SIGALRM, alarm_handler);
alarm(2);
time_t t1 = time(NULL);
sleep(10);
time_t t2 = time(NULL);
printf("waste : %ld(s)\n", t2-t1);
return 0;
}
运行结果:
waste : 2(s)
本文通过一个简单的C程序实例,详细解释了如何使用SIGALRM信号来设置超时机制,并特别关注了其在多线程环境下的表现。程序通过设置信号处理函数和定时器,实现了一个计时功能,展示了如何避免睡眠中断导致的程序挂起问题。
45

被折叠的 条评论
为什么被折叠?



