首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

unix环境高级编程 第十章十九节sleep函数实现为什么要先阻塞SIGALRM?该怎么解决

2013-01-25 
unix环境高级编程 第十章十九节sleep函数实现为什么要先阻塞SIGALRM?unix环境高级编程 第十章十九节sleep

unix环境高级编程 第十章十九节sleep函数实现为什么要先阻塞SIGALRM?
unix环境高级编程 第十章十九节sleep函数实现为什么要先阻塞SIGALRM??

[解决办法]
帖代码,,
不想自己翻书
[解决办法]
10.4,10.5都是有错误的例子,说明都很清楚,在alarm后pause之间存在时间窗口,极有可能在pause之前SIGALRM已被投递处理完毕,之后将会永远睡在pause上。

所以后面用了可靠的实现,即sigsuspend函数,首先阻塞SIGALRM,此后SIGALRM可以投递但不会被处理,之后alarm定时,最后sigsuspend原子的解除SIGALRM阻塞并挂起。 在SIGALRM投递后或者SIGALRM投递前有其他信号被处理, 均可以让sigsuspend返回,此时调用alarm(0)得到剩余的定时器时间,因为可能是非SIGALRM中断的sigsuspend。

热点排行