当前位置:网站首页>unix环境编程 第十五章 15.8信号量
unix环境编程 第十五章 15.8信号量
2022-08-09 10:26:00 【玛丽苏打肉饼】
信号量与IPC不同,它是一个计数器,用于为多个进程提供对共享数据对象的访问。
为了获得共享资源,进程需要执行下列操作:
- 测试控制该资源的信号量。
- 若此信号量的值为正,则进程可以使用该资源,在这种情况下,进程会将信号量值减1,表示它使用了一个资源单位。
- 若此信号量的值为0,则进程进入休眠状态,直至信号量值大于0.
当进程不在使用由一个信号量控制的共享资源时,该信号量值增1。如果有进程正在休眠等待此信号量,则唤醒他们。信号量值的增减操作时原子操作。
常用的信号量形式被称为二元信号量,它控制单个资源,其初始值为1。
当我们想使用XSI信号量时,首先需要通过调用函数semget来获得一个信号量ID。
#include <sys/sem.h>
int semget(key_t key,int nsems,int flag);
//成功返回信号量ID,出错返回-1
nsems是该集合中的信号量数,如果是创建新集合,则必须指定nsems。如果是引用现有集合(一个客户进程),则将nsems指定为0。
smectl函数包含了多种信号量操作
#include <sys/sem.h>
int semctl(int semid,int semnum,int cmd,...)
第四个参数是可选的,它是否使用取决于所请求的命令,如果使用该参数,则其类型是senum,它是多个命令特定参数的联合:
union semun
{
int val; /*for SETVAL*/
struct semid_ds *buf; /*for IPC_STAT and IPC_SET*/
unsigned short *array;/*for GETALL and SETALL*/
}
函数semop自动执行信号量集合上的操作数据
#include <sys/sem.h>
int semop(int semid,struct sembuf semoparray[],size_t nops);
//成功返回0,出错返回-1
参数semoparray是一个指针,它指向一个由sembuf结构表示的信号量操作数组:
struct sembuf
{
unsigned short sem_num;
short sem_op;
short sem_flg;
}
参数nops规定该数组中操作的数量。
边栏推荐
- [贴装专题] 贴装流程中涉及到的位置关系计算
- Quick sort eight sorts (3) 】 【 (dynamic figure deduction Hoare, digging holes, front and rear pointer method)
- 【size_t是无符号整数 (-1 > 10) -> 1】
- Received your first five-figure salary
- By asking where the variables are stored, the shepherd boy laughed and said to use pointers, Go lang1.18 introductory refining tutorial, from Bai Ding to Hongru, the use of go lang type pointers (Poin
- day16_03集合
- Win7 远程桌面限制IP
- 单元测试2之实际结果检查的引用
- 对话跨国消费品牌DPO:数据安全合规从何做起?8.11直播见!
- tuple dictionary collection
猜你喜欢
随机推荐
踩坑scrollIntoView
How to quickly get through the mirror release process?
LeetCode(剑指 Offer)- 25. 合并两个排序的链表
MySQL索引的B+树到底有多高?
OpenGL ES2.0编程三部曲(转载自MyArrow)
The GNU Privacy Guard
WUSTOJ:n个素数构成等差数列
function two
动态内存管理
Attentional Feature Fusion
主从postition变化无法锁定_Slave_IO_Running显示No_Slave_Sql_Running显示No---Mysql主从复制同步002
LM小型可编程控制器软件(基于CoDeSys)笔记二十六:plc的数据存储区(模拟量输入通道部分)
1004 成绩排名 (20 分)
上传张最近做的E2用的xmms的界面的截图
集合与函数
1003 我要通过! (20 分)
函数二
基本运算符
深度学习--自编码器(AutoEncoder)
1005 继续(3n+1)猜想 (25 分)