SIGALRM与sleep

本文详细解析了sleep函数的工作原理,指出其可能使用SIGALRM信号来实现,并强调在项目中混合使用sleep与alarm函数可能导致的问题。此外,还提供了一个确保sleep过程中不被中断的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

很多疑惑看看man手册就清楚了:

DESCRIPTION
sleep() makes the calling thread sleep until X seconds have elapsed or a signal arrives which is not ignored.

描述:
sleep使线程沉睡,直到X秒——或者有一个未被忽略的信号到达。

而sleep本身也是通过ALRM信号发挥作用的。

BUGS
sleep() may be implemented using SIGALRM; mixing calls to alarm(2) and sleep() is a bad idea.
Using longjmp(3) from a signal handler or modifying the handling of SIGALRM while sleeping will cause undefined results.

漏洞:
sllep函数可能是用SIGALRM来实现的,混合调用alarm和sleep可不是个好主意。
在sleep期间修改SIGALRM的处理会导致未知错误。。

总结

这样一来整个项目中都不能随便使用alarm函数了,因为你不知道哪个草丛里会冒出来一个sleep();
那么如何保持sleep不被打断呢?这个方法[https://blog.youkuaiyun.com/cjsycyl/article/details/22667023]
很原始,但有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值