为什么sigsuspend要与sigprocmask配合使用?
来源:互联网 发布:市场监督管理局软件 编辑:程序博客网 时间:2024/06/08 15:39
apue示例代码:
sigemptyset(&new_mask);
sigemptyset(&zero_mask); // 清空信号集zero_mask
sigaddset(&new_mask, SIGQUIT);
sigprocmask(SIG_BLOCK, &new_mask, &old_mask); // 阻塞SIGQUIT
while( quitflag == 0 )
{
sigsuspend(&zero_mask); // 将信号掩码替换为空,等待SIGQUIT信号处理函数将quitflag置1
}
sigprocmask(SIG_SETMASK, &old_mask, NULL); // 恢复信号掩码
为什么sigsuspend要与sigprocmask配合使用?
是为了原子操作
如果之前没有调用sigprocmask()屏蔽SIGQUIT信号,那么SIGQUIT信号随时都能发生
假定恰恰在判断quitflag == 0之后,信号发生,调用信号处理程序,quitflag = 1
从信号处理程序返回后,开始调用sigsuspend()..
如果此后没有第二个SIGQUIT信号,那么程序将一直阻塞在sigsuspend(),虽然此时quitflag = 1
调用sigprocmask()屏蔽SIGQUIT信号之后,即使信号发生,也将延迟递交,直到sigsuspend()解除信号屏蔽。
- 为什么sigsuspend要与sigprocmask配合使用?
- 为什么sigsuspend要与sigprocmask配合使用?
- Linux sigsuspend与sigprocmask使用详解
- 函数sigsuspend sigprocmask的使用
- sigprocmask和sigsuspend转
- sigprocmask和sigsuspend转
- sigprocmask , sigpending 和 sigsuspend函数
- sigsuspend sigprocmask函数的使用方法
- 为什么要Autowired和Qualifier配合使用
- sigsuspend 函数使用 及与 pause 区别
- sigsuspend 函数使用 及与 pause 区别
- sigsuspend 函数使用 及与 pause 区别
- sigsuspend 函数使用 及与 pause 区别
- sigsuspend 函数使用 及与 pause 区别
- 10 对sigprocmask,sleep 函数的理解(sigsuspend)
- Linux信号控制-sigprocmask,sigsuspend,sigpending,sigaction,sigqueue
- linux学习---信号(signal,sigaction,kill,sigqueue,sigprocmask,sigpending,sigsuspend)
- 条件变量为什么要和互斥锁配合使用
- 手机wap网站建置方案
- Windows网络配置和TCP/IP协议配置及诊断
- 安装MyEclipse8.5转成安装MyEclipse6.5
- 继续狂奔
- about:
- 为什么sigsuspend要与sigprocmask配合使用?
- 为什么进程组的leader不允许调用setsid()?
- 第一次
- 来看看,大家指导指导
- 我爱学习
- c#接口
- C# 保存好运行窗口
- 郁闷
- 第一篇