进程间通信--POSIX信号量
1.未决和阻塞标志可以用相同的数据类型sigset_t来存储,sigset_t称为信号集,这个类型可以表示每个信号的“有效”或“无效”状态,
在阻塞信号集中“有效”和“无效”的含义是该信号是否被阻塞,而在未决信号集中“有效”和“无效”的含义是该信号是否处于未决状态。
阻塞信号集也叫做当前进程的信号屏蔽字(Signal Mask),这里的“屏蔽”应该理解为阻塞而不是忽略。
2.sigset--装信号的容器
信号能被装进容器吗?能。
为什么需要容器来装信号?其实还是方便 linux 内核处理信号,当然也方便用户程序处理。试想一下,如果同时发送了好多不同的
信号给进程,然而进程一次只能处理一个信号,所以进程得把接收到的信号先保存起来才行。
3. sigset_t
POSIX定义一个数据结构—— sigset_t ,typedef定义的数据类型,一个64位宽度的整数,是一个信号集合。信号的编号是从1到64这个范围。
而sigset_t正好是一个64位整数,所以有时候sigset_t也被称为信号位图。
操作 sigset_t 的函数
操作sigset_t的函数主要有 5 个。
sigemptyset (清空集合,所有比特位置 0)
sigfillset (填充集合,所有比特位置 1)
sigaddset (添加信号到集合,将某一比特位置 1)
sigdelset (删除某个信号,将某一比特位置 0)
sigismember (是否存在某个信号,判断某一比特位是否为 1)
3.1 打印sigset_t的函数
void printsigset(const sigset_t *set)
{
for (int i = 1; i <= 64; i++) {
if (i==33) putchar(' ');
if (sigismember(set, i) == 1)
putchar('1');
else
putchar('0');
}
puts("");
}
3.2 填充sigset_t
sigfillset(&st);
printsigset(&st);
结果:
11111111111111111111111111111110 01111111111111111111111111111111
3.3 清空sigset_t
sigemptyset(&st);
printsigset(&st);
结果:
00000000000000000000000000000000 00000000000000000000000000000000
3.4 添加信号
sigaddset(&st, SIGHUP);
sigaddset(&st, SIGINT);
sigaddset(&st, SIGKILL);
sigaddset(&st, SIGSYS);
sigaddset(&st, SIGRTMIN);
sigaddset(&st, SIGRTMAX);
printsigset(&st);
上面这段代码一共添加了 6 个不同的信号,可以发现信号对应的比特位都被置1了。
结果:
11000000100000000000000000000010 01000000000000000000000000000001
3.5 删除信号
sigdelset(&st, SIGKILL);
printsigset(&st);
这里只删除了信号 9(SIGKILL),发现第 9 个比特位被置 0了。
结果:
11000000000000000000000000000010 01000000000000000000000000000001
3.6 判断集合里是否存在某个信号
if (sigismember(&st, SIGKILL)) {
printf("SIGKILL is member\n");
}
if (sigismember(&st, SIGINT)) {
printf("SIGINT is member\n");
}
结果:因为 SIGKILL 刚刚被删除了,所以这里只打印了 SIGINT.
SIGINT is member
待看:http://blog.csdn.net/zhangxiao93/article/details/52583127
http://blog.csdn.net/anonymalias/article/details/9219945
进程间通信--POSIX信号量的更多相关文章
- Linux进程间通信IPC学习笔记之同步二(Posix 信号量)
Linux进程间通信IPC学习笔记之同步二(Posix 信号量)
- 进程间通信之POSIX信号量
POSIX信号量接口,意在解决XSI信号量接口的几个不足之处: POSIX信号量接口相比于XSI信号量接口,允许更高性能的实现. POSIX信号量接口简单易用:没有信号量集,其中一些接口模仿了我们熟悉 ...
- Linux进程同步之POSIX信号量
POSIX信号量是属于POSIX标准系统接口定义的实时扩展部分.在SUS(Single UNIX Specification)单一规范中,定义的XSI IPC中也同样定义了人们通常称为System V ...
- linux内核剖析(十)进程间通信之-信号量semaphore
信号量 什么是信号量 信号量的使用主要是用来保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有. 信号量的值为正的时候,说明它空闲.所测试的线程可以锁定而使用它.若为0,说明它被占用,测试的线 ...
- system V信号量和Posix信号量
一.函数上的区别 信号量有两种实现:传统的System V信号量和新的POSIX信号量.它们所提供的函数很容易被区分:对于所有System V信号量函数,在它们的名字里面没有下划线.例如,应该是sem ...
- Linux进程间通信之信号量
春节过去了,真的过去一年了.在公司待了快一年了.2016希望自己变得越来越好. ps:上面那句话是年前写的,中间隔了那么久,自己也变懒了. 一.信号量 1,信号量本质是一个计数器,控制访问共享资源的最 ...
- 第10章 Posix 信号量
10.1 概述 10.1.1 信号量类型 Posix有名信号量:使用Posix IPC名字,可用于进程或线程间同步: Posix基于内存的信号量:也叫做无名信号量,存放在共享内存中,可用于进程或线程间 ...
- Linux多线程实践(5) --Posix信号量与互斥量解决生产者消费者问题
Posix信号量 Posix 信号量 有名信号量 无名信号量 sem_open sem_init sem_close sem_destroy sem_unlink sem_wait sem_post ...
- POSIX信号量
DESCRIPTION POSIX 信号量允许进程间和线程间同步他们的操作. 一个信号量是一个整型(integer),其值不能小于0. 信号量允许2中操作:给信号量的值加1(sem_post); 给信 ...
随机推荐
- javascritp文章 You-Dont-Know-JS
https://github.com/getify/You-Dont-Know-JS 有6个系列.git在线免费. 第一本, up and going (点击链接) Mission: 作者建议在开始学 ...
- 原生js实现倒计时
html代码: <div class="box">距离下班还有:<span>01:01:30</span></div> css代码: ...
- Ubuntu 18.04 install JDK8.201
sudo add-apt-repository ppa:webupd8team/java Press Enter to continue. sudo apt update sudo apt insta ...
- 2-20 MySQL集群搭建实现高可用
MySQL集群概述和安装环境 MySQL Cluster是MySQL适合于分布式计算环境的高实用.高冗余版本.Cluster的汉语是"集群"的意思.它采用了NDB Cluster ...
- SecureCRT 7.2.0 Mac版密码无法保存的解决办法
参考:http://jingyan.baidu.com/article/915fc414fda5fb51394b20bd.html 我之前在网上找的解决办法都是SecureCRT 7.2.0 Mac ...
- IOS UI-滚动视图(UIScrollView)
#import "ViewController.h" /* 1.UIScrollView控件是什么? (1)移动设备的屏幕⼤小是极其有限的,因此直接展示在⽤用户眼前的内容也相当有限 ...
- OC 点语法和变量作用域
一.点语法 (一)认识点语法 声明一个Person类: 1 #import <Foundation/Foundation.h> 2 3 @interface Person : NSObje ...
- O(logn)二叉树中的意义----高性能(四)
转载地址:https://zhidao.baidu.com/question/239708227508660244.html?qbl=relate_question_2&word=%CA%B1 ...
- java并发编程:线程安全管理类--原子操作类--AtomicLongArray
1.类 AtomicLongArray public class AtomicLongArray extends Object implements Serializable 可以用原子方式更新其元素 ...
- sql语句:查询、排序、不区分大小写查询,及联合使用
1.不排序时的查找语句: offset message 为表名,talker 为列名. 此语句的意思是:从message 表中查找 talker 等于wxid_0930479303212的数据,从第 ...