当前位置:网站首页>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规定该数组中操作的数量。
边栏推荐
- GeoScene Pro 2.1下载地址与安装基本要求
- 3D打印了这个杜邦线理线神器,从此桌面再也不乱了
- Collections and Functions
- Win32控件------------显示系统使用的控件版本
- Master-slave postition changes cannot be locked_Slave_IO_Running shows No_Slave_Sql_Running shows No---Mysql master-slave replication synchronization 002
- ESIM(Enhanced Sequential Inference Model)- 模型详解
- 2021-01-11-雪碧图做表情管理器
- 1: bubble sort
- Electron application development best practices
- 1005 继续(3n+1)猜想 (25 分)
猜你喜欢
随机推荐
TELNET协议相关RFC
浅析JWT安全问题
The GNU Privacy Guard
3D printed this DuPont cable management artifact, and the desktop is no longer messy
Cpolar内网穿透的面板功能介绍
常用语言图表库总结
抛出一个问题? Mysql环境下进行Count操作执行的时候速度很慢_需手动给主键添加索引---MySql优化001
集合与函数
hover内部指定子类的样式
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
上传张最近做的E2用的xmms的界面的截图
function two
Collections and Functions
cannot import name ‘load_offloaded_weights‘ from ‘accelerate.utils‘ (/home/huhao/anaconda3/envs/huha
认识
好久没上博客了,好长时间没有进展了
Secretive present: in modern times
1002 写出这个数 (20 分)
1: bubble sort
MySQL和MyEclipse的数据库连接操作