如何解决确保当sigsuspend返回时将调用信号处理程序
假设我为SIGALRM
设置了以下信号处理程序:
volatile sigatomic_t alarm_flag;
void alarm_handler(int signum)
{
(void)signum;
alarm_flag = 1;
}
然后假设我调用了alarm
,然后输入了一段代码,其中SIGALRM
被阻止,但是我想与其同步。也就是说,我要使用sigsuspend
等待警报到期:
sigfillset(&set);
sigdelset(&set,SIGALRM);
sigsuspend(&set);
some_other_command();
是否有POSIX保证在执行alarm_handler
时将调用some_other_command
还是我需要执行以下操作?
sigsuspend(&set);
while ( !alarm_flag );
some_other_command();
解决方法
摘自sigsuspend()
的POSIX文档:
如果要执行信号捕获功能,则
sigsuspend()
将在信号捕获功能返回后返回,并且信号掩码恢复到sigsuspend()
调用之前已存在的集合
是的,有保证。如果您没有在SIGALARM
中阻止sigsuspend()
,则至少(当然,并假设在调用警报之前未处理警报)。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。