SystemV 信号量(一) —— SystemV信号量的相关操作函数

news2024/12/23 17:01:57

SystemV IPC 方案的相关内容都是通过 “房间密码”来创建房间,获取到房间的ID,后面其他进程也可以根据这个房间密码来拿到同一个房间的ID。这是理解下面这些操作函数的关键。


         目录

1、信号量集合的创建 semget

2、信号量的初始化 / 销毁 semctl

3、信号量的PV操作 semop


1、信号量集合的创建 semget

注意这里是信号量集合的创建,semget 可以一次创建多个信号量,为了管理这些信号量,统一把这些信号量放在一个信号量集合中,如果创建成功,返回的就是信号集的ID。

第一个参数 key:“房间密码”。通过ftok函数获取,。

第二个参数 nsem:信号量集合中信号量的个数。如果不打算创建 一个新的信号量集合的时候,该参数可以是0。

第三个参数 semflg:信号量集合的访问权限。通常是IPC_CREAT | 0666,如果信号量集合已经存在,那么信号量集合的访问权限会被修改成当前填入的权限。

返回值:成功返回信号量集合的ID,失败返回 -1

key_t key = ftok(".", 100);

// 创建一个信号量集合,该信号集包含2个信号量,访问权限为 0666
semget(key, 2, IPC_CREAT | 0666);

 

2、信号量的初始化 / 销毁 semctl

semctl 可以对信号量集合中的信号量进行初始化或者删除。因为现在只有信号量集合的ID,实际上我们要想操作信号量集合中的某一个信号量,需要先给这些信号量编号,然后根据编号来定向操作某一个信号量。

第一个参数 semid:信号量集合的ID

第二个参数 semnum:要操作信号量集合中的信号量编号。信号量集合给信号量编号的方式类似于数组下标,是从0开始的,所以为了区分哪个信号量是干什么用的,可以使用宏或者 枚举的方式来指明。

// 枚举的方式
// SEM_WR: 对应下标0
// SEM_RD: 对应下标1
enum SEM
{
 SEM_WR,
 SEM_RD
};

// 宏定义的方式
#define SEM_WR 0
#define SEM_RD 1

第三个参数 cmd:要对信号量所作的操作。可选值如下:

可选值含义
GETVAL获取第 semnum 个信号量的值,当前函数的返回值就是获得值。
SETVAL设置信号量的值,需要用到第四个参数联合体
IPC_RMID删除当前信号量集合

第四个参数:根据不同的cmd,可能需要传递参数。比如,当cmd=SETVAL时,需要填入第四个参数来告知当前函数,你想要要设置的值。第四个参数是一个联合体,联合体的格式如下:

union semun {
    int              val;    /* Value for SETVAL */
    struct semid_ds *buf;    /* Buffer for IPC_STAT, IPC_SET */
    unsigned short  *array;  /* Array for GETALL, SETALL */
    struct seminfo  *__buf;  /* Buffer for IPC_INFO
                                (Linux-specific) */
};

返回值:失败返回 -1;成功时会根据cmd的值返回不同的值(值是大于0的)

3、信号量的PV操作 semop

semop包含了对信号量集合中信号量的 P操作(申请) 和 V操作(释放)。

第一个参数 semid:信号量集合的ID

第二个参数 sops:输入型参数,要对信号量集合中的哪个信号量什么操作,阻塞方式又是怎样。结构体sembuf 的声明如下:

struct sembuf {
    unsigned short sem_num;     // 要操作的信号量的编号
    short sem_op;               // 对信号量进行的操作
                                // 1: 释放资源,V操作
                                // -1: 申请资源,P操作
    short sem_flg;             // 阻塞方式。0表示阻塞,IPC_NOWAIT表示非阻塞
};

   注意:如果要一次操作多个信号量,那么就需要定义一个sembuf类型的结构体数组

第三个参数 nsops:要操作的信号量的个数。一般是 1 

返回值:成功返回 0,失败返回 -1。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/67115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C/C++入门001-概述环境搭建与案例

文章目录1.C语言概述1.1 计算机与程序1.1.1 什么是计算机1.1.2 什么是计算机程序 ?1.2 进制转化1.3 计算机语言1.4 C语言发展1.5 安装开发工具与编译器1.5.1 安装 codeblocks1.5.2 设置MinGW的环境变量1.6 C语言的HelloWorld1.6.1 入门1.6.2 demo案例1.C语言概述 参考&#x…

基于jsp+mysql+ssm大学本科考研服务系统-计算机毕业设计

项目介绍 考研是一个艰难辛苦的过程,需要具备充沛的精力;考研是一场旷日持久的战争,需要吃苦耐劳的精神和持之以恒的毅力和意志,如果三天打鱼,两天晒网,那么很难在考研大军中胜出;考研的过程中…

UDP-阿拉伯糖,15839-78-8,UDP-L-Arabinose,阿拉伯糖偶联核苷酸

常用中文名:[[(2R,3S,4R,5R)-5-(2,4-dioxopyrimidin-1-yl)-3,4-dihydroxyoxolan-2-yl]methoxy-hydroxyphosphoryl] [(2R,3R,4S,5S)-3,4,5-trihydroxyoxan-2-yl] hydrogen phosphate 常用英文名:[[(2R,3S,4R,5R)-5-(2,4-dioxopyrimidin-1-yl)-3,4-dihydro…

windows个性化设置--自定义windows系统的u盘图标

选择一张图片,最好是正方形的,作为u盘图标 使用图片编辑软件将图片转换为ico格式 将x.icon图标放到u盘根目录 在u盘根目录下建立一个文本文件,编辑内容 [autorun] iconx.ico保存,将文本文件改名为autorun.inf 之后重新插拔u盘…

mySQL—mySQL事务

文章目录什么是事务?事务定义:设置事务的目的:事务提交:事物的特性原子性(A)提交分类:一致性(C)持久性(I)持久性危机持久性危机如何解决&#xff…

【深度学习】实验6布置:图像自然语言描述生成(让计算机“看图说话”)

DL_class 学堂在线《深度学习》实验课代码报告(其中实验1和实验6有配套PPT),授课老师为胡晓林老师。课程链接:https://www.xuetangx.com/training/DP080910033751/619488?channeli.area.manual_search。 持续更新中。 所有代码…

关于JVM:内容以及流程释义

对于JVM、GC、类加载,很多人摸不清楚头绪,不知道他们之间的关系。误以为GC和类加载还有JVM区分统称垃圾回收,实则他们包含的东西很多,很细,完整的了解正个JVM的加载过程,就需要全面理解这些东西。 我认为的…

三节锂电池充电管理芯片,IC电路图,BOM物料表

5V输入升压,三节锂电池充电管理芯片,IC电路图和BOM物料表;20V输入降压,三节锂电池充电管理芯片,IC电路图和BOM物料表。 5V输入,三节锂电充电管理系统 1 5V输入升压,三节锂电池充电管理芯片 FS40…

实现网站都变成灰色-filter

如下:当某些情况发生时一些娱乐网站统一变成灰色系,全站的内容都变成灰色了,包括按钮、图片等等。 怎么实现的? 最简单的是考虑所有的内容都统一换了一个 CSS 样式,图片也全换成灰色的,按钮等样式也统一换…

Web3和区块链入门——Web3历史和Web3是什么?

大家好,我是无用,今天跟大家聊下Web3历史和Web3什么。 Web3历史 Web3.0一词最初由英国计算机科学家蒂姆伯纳斯-李(著名的万维网之父)在1998年提出,但是他那个时候所说的Web3.0是自己所提出的语义网络,他认为…

Newsletter 2022-11|HStreamDB 0.11 发布

11月我们发布了 HStreamDB 0.11,修复了多项已知问题。同时也在继续推进 HStream Platform 的开发,并计划于本月底上线首个 Alpha 版本。 v0.11 发布 随着云原生流数据库 HStreamDB 项目的日益成熟,为了更好地适应项目发展,我们决…

零基础入门推荐系统 - 新闻推荐 - 实操1

内容导航: 零基础入门推荐系统 - 新闻推荐 - 实操1赛题数据介绍:数据集介绍:读取数据集:零基础入门推荐系统 - 新闻推荐 - 实操1 赛题数据介绍: 赛题以预测用户未来点击新闻文章为任务,数据集报名后可见并可下载,该数据来自某新闻APP平台的用户交互数据…

torch.autograd

torch.autograd torch.autograd: 提供了类和函数,用来对任意的标量函数进行求导,要想使用自动 求导,只需要对已有的代码进行微小的改变,只需要将所有的tensor包含进VariableVariableVariable对象中即可。 torch.autograd.backwa…

2.2.2同向放大器、同向放大器的设计

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…

unity——通过点击按钮进行场景切换

前记 通过点击鼠标进行场景切换请参考: Unity——通过点击鼠标进行场景切换_行秋的博客-CSDN博客通过点击按钮进行场景切换请参考:unity——通过点击按钮进行场景切换_行秋的博客-CSDN博客1.准备两个示例场景 2.点击File—>Build Settings...&#…

网页优化(布局优化、图片优化)

为什么页面优化? 页面扩展灵活提高页面的加载速度提高用户的体验 布局优化-高度自适应 自适应 1.宽高不写 注意:当子元素浮动时,父元素不写高度会引起高度塌陷 2.宽高写%单位 3.使用max-width/min-width/max-height/min-height 高度塌陷 清除高度塌…

Java基础语法纯小白入门

第二天内容: |___01.今日内容概述.mp4 |___02.数据类型转换_自动类型转换.mp4 |___03.数据类型转换_强制类型转换.mp4 |___04.数据类型转换注意事项.mp4 |___05.数据类型转换面试题.mp4 |___06.编码表简单概述.mp4 |___07.Java运算符_算术运算符.mp4 |___08…

【kafka】Timed out waiting for a node assignment

1.概述 在做flink任务的时候,报错 Timed out waiting for a node assignment 详细错误如下 2.源码 在SourceCoordinator中我们调用了start方法启动.启动方法主要做了2件事 创建Enumerator启动Enumerator

Machine Learning机器学习(学习记录)

Machine Learning机器学习 目录Machine Learning机器学习聚类K-Means基本思路k均值算法流程k均值算法的特点k-均值算法的优点:k-均值算法的缺点:sklearn实现KMeansK-Means算法基本思路代码实现K-MeansPython代码实现sklearn实现K-Means参考:聚…

[附源码]Python计算机毕业设计Django小太阳幼儿园学生管理系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…