sigsuspend()函数作用详解
来源:互联网 发布:u盘物理损坏数据恢复 编辑:程序博客网 时间:2024/06/05 23:48
1)头文件:#include <signal.h>
2)一个保护临界区代码的错误实例:(sigprocmask()和pause()实现)
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
void handler(int sig)
{
}
int main()
{
}
上面实例的问题是:本来期望pause()之后,来SIGINT信号,可以结束程序;可是,如果当“取消阻塞”和“pause”之间,正好来了SIGINT信号,结果程序因为pause的原因会一直挂起。。。
解决的方式,当然是sigsuspend()函数了。
3)使用sigsuspend()的程序
#include <unistd.h>
#include <signal.h>
#include <stdio.h>
void handler(int sig)
{
}
int main()
{
}
sigsuspend的原子操作是:
(1)设置新的mask阻塞当前进程(上面是用wait替换new,即阻塞SIGUSR1信号)
(2)收到SIGUSR1信号,阻塞,程序继续挂起;收到其他信号,恢复原先的mask(即包含SIGINT信号的)。
(3)调用该进程设置的信号处理函数(程序中如果先来SIGUSR1信号,然后过来SIGINT信号,则信号处理函数会调用两次,打印不同的内容。第一次打印SIGINT,第二次打印SIGUSR1,因为SIGUSR1是前面阻塞的)
(4)待信号处理函数返回,sigsuspend返回了。(sigsuspend将捕捉信号和信号处理函数集成到一起了)
- sigsuspend()函数作用详解
- sigsuspend()函数作用详解
- sigsuspend()函数作用详解
- sigsuspend()函数作用详解
- sigsuspend()函数作用详解
- sigsuspend()函数作用
- sigsuspend详解
- sigsuspend函数
- sigsuspend函数
- sigsuspend函数
- sigsuspend函数
- sigsuspend 函数 释疑
- 10.16 sigsuspend 函数
- sigsuspend()函数 解释
- mysleep与sigsuspend函数
- sigsuspend函数和sigwait函数
- sigprocmask , sigpending 和 sigsuspend函数
- sigsuspend sigprocmask函数的使用方法
- java报错
- 如何查看 ubuntu 是 32位 or 64位?
- Boost智能指针——shared_ptr
- Ext.form.field.ComboBox示例
- Java中点击事件的四种写法
- sigsuspend()函数作用详解
- 数据库优化知识
- Promise例子
- 菜单框架简单程序设计
- MySQL字符编码设置
- github常见操作和常见错误!错误提示:fatal: remote origin already exists.
- PHP数据库操作——连接查询
- iOS开发中上传JSON字符串到后台服务器
- JUnit5 技术前瞻