UNPv2第十一章:System V信号灯
2016-04-27 09:20
211 查看
二值信号灯:值为0或1的信号灯。资源如果被锁住就是0,如果可用为1
计数信号灯:值在0到某个限制值之间的信号灯。信号灯的值就是可用资源数
返回值是一个信号灯标识符,semop和semctl函数将使用它
Nsems参数指定集合中的信号灯数。如果只是访问一个信号灯集,可以置为0.一旦创建完毕一个信号灯集,我们就无法改变信号灯数
Oflag值是SEM_R和SEM_A常值的组合。(R代表read,A代表alter)。它还可以与IPC_CREAT或IPC_CREAT|IPC_EXCL按位或。
函数的参数 semid 为信号量集的标识符;
参数 nops 指出将要进行操作的信号的个数;
semop 的第二个参数 sops 指向的结构体数组中,每个 sembuf 结构体对应一个特定信号的操作。因此对信号量进行操作必须熟悉该数据结构,该结构定义在 linux/sem.h,如下所示:
参数semid标识待控制其操作的信号灯集
参数semnum标识该信号灯集中的某个成员(0,1到nsems-1)。semnum值仅仅用于GETVAL、SETVAL、GETNCNT、GETZCNT和GETPID命令
第四个参数是可选的,取决于第三个参数cmd
从Posix信号灯到System V信号灯发生了如下变动:
System V信号灯由一组值构成。当指定应用到某个信号灯集的一组信号灯操作时,要么所有操作都执行,要么一个操作都不执行
可应用到一个信号灯集的每个成员的操作有三种:测试其值是否为0、往其值加一个整数以及从值中减掉一个整数(假设结果值仍然非负)
创建一个System V信号灯集需要技巧,因为创建该集合并随后初始化各个值需要两个操作,从而可能导致竞争状态
System V信号灯提供“复旧”特性,该特性保证在进程终止时反转某个信号灯操作
计数信号灯:值在0到某个限制值之间的信号灯。信号灯的值就是可用资源数
1 semget函数
创建一个信号灯集或访问一个已存在的信号灯集#include<sys/sem.h> Int segget(key_t key, int nsems, int oflag); //返回:成功时为非负标识符,出错时为-1
返回值是一个信号灯标识符,semop和semctl函数将使用它
Nsems参数指定集合中的信号灯数。如果只是访问一个信号灯集,可以置为0.一旦创建完毕一个信号灯集,我们就无法改变信号灯数
Oflag值是SEM_R和SEM_A常值的组合。(R代表read,A代表alter)。它还可以与IPC_CREAT或IPC_CREAT|IPC_EXCL按位或。
2 semop函数
#include<sys/sem.h> int semop(int semid, struct sembuf *opsptr, size_t nops); //调用成功返回 0,失败返回 -1。
函数的参数 semid 为信号量集的标识符;
参数 nops 指出将要进行操作的信号的个数;
semop 的第二个参数 sops 指向的结构体数组中,每个 sembuf 结构体对应一个特定信号的操作。因此对信号量进行操作必须熟悉该数据结构,该结构定义在 linux/sem.h,如下所示:
struct sembuf{ short sem_num; //信号在信号集中的索引,0代表第一个信号,//1代表第二个信号 short sem_op; //操作类型 short sem_flg; //操作标志 };
3 semctl函数
semctl函数对一个信号量执行各种控制操作。#include <sys/sem.h> int semctl(int semid, int semnum, int cmd, ... );
参数semid标识待控制其操作的信号灯集
参数semnum标识该信号灯集中的某个成员(0,1到nsems-1)。semnum值仅仅用于GETVAL、SETVAL、GETNCNT、GETZCNT和GETPID命令
第四个参数是可选的,取决于第三个参数cmd
union semun { int val; // SETVAL使用的值 struct semid_ds *buf; // IPC_STAT、IPC_SET 使用缓存区 unsigned short *array; // GETALL,、SETALL 使用的数组 };
从Posix信号灯到System V信号灯发生了如下变动:
System V信号灯由一组值构成。当指定应用到某个信号灯集的一组信号灯操作时,要么所有操作都执行,要么一个操作都不执行
可应用到一个信号灯集的每个成员的操作有三种:测试其值是否为0、往其值加一个整数以及从值中减掉一个整数(假设结果值仍然非负)
创建一个System V信号灯集需要技巧,因为创建该集合并随后初始化各个值需要两个操作,从而可能导致竞争状态
System V信号灯提供“复旧”特性,该特性保证在进程终止时反转某个信号灯操作
相关文章推荐
- 树莓派做FM发射器
- Delphi通过MSHTML实现一个HTML解析类
- iOS上传Appstore遇到的问题
- Google Java编程风格指南
- Twitter 架构优化之路--Twitter是如何做到每秒处理3000张图片的
- Python的“二维”字典 (two-dimension dictionary)定义与实现方法
- Twitter 架构优化之路--Twitter是如何做到每秒处理3000张图片的
- Twitter 架构优化之路--Twitter是如何做到每秒处理3000张图片的
- 移动端页面开发
- 【排序算法】希尔排序原理及Java实现
- 更新版本流程 ios
- 互联网相似图像识别检索引擎 —— 基于图像签名的方式
- linux两台服务器之间文件/文件夹拷贝
- 十年许嵩雅俗共赏
- UNPv2第十章:Posix信号灯
- spring使用aspectj开发的增强类型注解和aspectj在spring中用到的切点函数
- c# xml读取省,市,区三级联动,下拉列表展示
- unity 3d 优化
- 网页加载速度优化1--压缩数据流
- 怎么往mac中finder个人收藏里添加文件夹