进程间的通信-信号量

news2024/9/21 2:15:20

信号量

1.资源竞争

  • 资源竞争 : 当多个进程同时访问共享资源时,会产生资源竞争,最终最导致数据混乱
  • 临界资源 : 不允许同时有多个进程访问的资源,包括硬件资源(CPU、内存、存储器以及其他外围设备)与软件资源(共享代码段、共享数据结构)
  • 临界区 : 访问临界资源代码
    在这里插入图片描述

2.同步与互斥

  • 互斥 : 同一时刻只有一个进程访问临界资源
  • 同步 : 在互斥的基础上增加了进程对临界资源的访问顺序
  • 进程主要的同步与互斥手段是信号量

3.信号量简介

信号量的起源来自于信号灯
在这里插入图片描述

  • 信号量: 由内核维护的整数,其值被限制为大于或等于0

  • 信号量可以执行如下操作:

     1.将信号量设置成一个具体的值
     2.在信号量当前值的基础上加上一个数值
     3.在信号量当前值的基础上减上一个数值
     4.等待信号量的值为 01.
    
  • 一般信号量分为二值信号量与计数信号量

1.二值信号量:一般指的是信号量的值为1,可以理解为只对应一个资源
2.计数信号量:一般指的是值大于等于2 ,可以理解为对应多个资源
  • 在 Linux 系统中查询信号量使用ipcs -s
    在这里插入图片描述

在这里插入图片描述

4.创建信号量

创建信号量集合调用semget函数

1.函数原型
int semget(key_t key, int nsems, int semflg);
2.函数头文件
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
2.函数功能
创建一个信号量集合
3.函数参数
key:ftok()函数生成
nsems:信号量的数量
semflg:信号量集合的标志
		IPC_CREAT:创建标志
		IPC_EXCL:与IPC_CREAT标志一起使用,如果信号量集合存在就报错
		权限标志
4.函数返回值
成功:返回信号量集合的id
失败:-1,并设置errno

5.初始化信号量

初始化信号量调用 semctl 函数

函数头文件
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/sem.h>
函数原型
int semctl(int semid, int semnum, int cmd,);
函数功能
信号量集合控制函数,根据cmd决定当前函数的功能
函数参数
semid:信号量集合的id
semnum:信号量的编号,信号量的编号从0开始
cmd:命令控制字
SETVAL: 设置信号量的值(Set the semaphore value (semval) to arg.val for
the semnum-th semaphore of the set, updating also the sem_ctime member of the
semid_ds structure associated with the set.)
[将信号量值(semval)设置为该集合的第semnum个信号量的arg.val,同时更新与该集合相关联
的semid_ds结构的sem_ctime成员。]
GETVAL: 获取信号量的值
SETALL: Set the semval values for all semaphores of the set using
arg.array,
......
...:后面是属于可变参数列表,根据不同的命令有不同的参数
函数返回值
成功:根据不同的命令有不同的返回值,可以查看帮助文档关于 RETURN 的说明
GETNCNT the value of semncnt
GETPID the value of sempid
GETVAL the value of semval
GETZCNT the value of semzcnt.
All other cmd values return 0 on success.
失败:返回-1,并设置 errno

使用命令时需要使用 union semun 共用体,具体定义如下:

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) */
};
The semid_ds data structure is defined in <sys/sem.h> as follows:
struct semid_ds {
	struct ipc_perm sem_perm; /* Ownership and permissions */
	time_t sem_otime; /* Last semop time */
	time_t sem_ctime; /* Creation time/time of last
	modification via semctl() */
	unsigned long sem_nsems; /* No. of semaphores in set */
};

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

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

相关文章

有关JS下隐藏的敏感信息

免责声明&#xff1a;本文仅做分享&#xff01; 目录 JavaScript 介绍 核心组成 工具 FindSomething ** 浏览器检查 ** LinkFinder URLfinder ** SuperSearchPlus ** ffuf ParasCollector waymore Packer Fuzzer JS逆向 应用&#xff1a; 小结&#xff1a; Ja…

基于Python+SQLite的课程管理系统

系统需求简介 1.1需求分析 实现一个具体的课程管理系统。按照软件工程思路设计简化的专业课数据库&#xff0c;尽量模拟现有专业课程一个学期的选课排课原型实际情况。&#xff08;注&#xff1a;本系统由本人单独设计、开发完成&#xff09; 1.2 数据结构需求分析 课程管理…

NAND闪存:迎来新的发展机遇

2024年&#xff0c;存储市场正在经历着动态的变化&#xff0c;其中包括合同价格的上涨、制造商营收的增长以及多项技术上的突破。在这个背景下&#xff0c;主要的存储公司正在为新的挑战做准备&#xff0c;尤其是在NAND闪存领域即将面临转型的情况下。 扩展阅读&#xff1a;20…

PMData:人工智能之运动记录数据集

简介 在这个数据集中&#xff0c;我们展示了 PMData 数据集&#xff0c;旨在将传统的生活记录与体育活动记录相结合。这样的数据集可以开发几个有趣的分析应用程序&#xff0c;例如&#xff0c;可以使用额外的运动数据来预测和分析日常发展&#xff0c;如人的体重和睡眠模式&a…

数据飞轮:打造业务增长的持续循环

在当今数据驱动的世界中&#xff0c;企业必须利用数据的力量才能保持竞争力。然而&#xff0c;仅仅收集和分析数据是不够的&#xff1b;企业必须能够从他们的数据中创造一个持续增长的循环&#xff0c;才能保持成功。其中一种方法就是创建数据飞轮。接下来让我们来探讨一下什么…

centos7如何连接网络 centos7wifi连接

这段时间重新学习 Linux 知识&#xff0c;用的是笔记本&#xff0c;连接的是无良房东家的 WiFi&#xff0c;IP地址经常变动。每次都要修改 Xshell 的配置才能连上虚拟机。效率很低。 为此&#xff0c;必须要解决这个 IP 地址经常变动的事情&#xff01;这里讲解的版本是&#…

Java集成gdal 处理解析tiff和shp数据

1. 配置 gdal 1.1. 官网下载 这个是因为你电脑是 win64 位才选择哦&#xff5e; 下载这个&#xff0c;然后解压 1.2. 复制这个压缩包下的 ddl 文件 可以按照类型复制&#xff0c;然后复制到你的 java jDK 文件夹下 1.3. 找到你的 java jdk 文件夹 不知道 java 的文件夹位置…

数字签名和CA数字证书的核心原理

看了蛋老师的视频就很容易理解了&#xff0c;首先对服务器的公钥和信息进行哈希运算得到一个短字符串&#xff0c;然后用CA机构中的私钥对这一短字符串进行加密就得到了一个数字签名&#xff0c;然后就这个数字签名放到数字证书中&#xff0c;同时服务器的公钥也放在数字证书中…

NFT Insider #148:The Sandbox 推出 SHIBUYA Y3K 时尚系列,Azuki 进军动漫 NFT 领域

市场数据 加密艺术及收藏品新闻 Infinex 新推 NFT 系列首四日销售额破4000万美元 尽管顶级 NFT 系列表现不佳&#xff0c;Infinex 的最新 NFT 系列在首四日内销售额已超过 4000 万美元。Infinex 是一个非托管平台&#xff0c;提供轻松访问链上协议和 dApp。 Infinex Core 的…

Day69补 前后端分离思想

ajax前后端分离 前后端分离处理&#xff1a;前端------&#xff08;数据&#xff09;-----服务端----&#xff08;数据&#xff09;-----前端-----动态改变页面的内容 1.json 1、JSON&#xff1a;由于JSON易读以及纯文本格式的特性&#xff0c;可以非常容易地与其他程序进行沟通…

引领长期投资新篇章:价值增长与财务安全的双重保障

随着全球金融市场的不断演变&#xff0c;长期投资策略因其稳健性和对价值增长的显著推动作用而日益受到投资者的重视。在这一背景下&#xff0c;Zeal Digital Shares&#xff08;ZDS&#xff09;项目以其创新的数字股票产品&#xff0c;为全球投资者提供了一个全新的长期投资平…

IPv6(四)

文章目录 Path MTUIPv6配置 Path MTU IPv4 对于数据过大的数据包会执行切片操作&#xff0c;但是切片有可能会造成设备性能的降低 IPv6使用Path MTU来传递数据过大的数据包 依次会协商最小的 MTU 单元为了减少中间转发设备的压力&#xff0c;中间转发设备不对 IPv6 报文进行分片…

【快速笔记】freeRTOS

第十八章 低功耗Tickless模式 睡眠模式:__WFI 中断唤醒 __WFE 事件唤醒 CPU CLK关闭 停止模式&#xff1a;RAM保持 中断唤醒 当 STM32F103 处于休眠模式的时候 Cortex-M3 内核停止运行&#xff0c;但是其他外设运行正常&#xff0c; 比如 NVIC、SRAM 等。 休眠模式的功耗比其他…

【Linux】环境部署kafka集群

目录 一、kafka简介 1. 主要特点 2.组件介绍 3.消息中间件的对比 二、环境准备 1.Java环境 2.Zookeeper环境 3.硬件环境集群 三、Zookeeper的集群部署 1.下载zookeeper 2.部署zookeeper集群 &#xff08;1&#xff09;node1节点服务器 &#xff08;2&#xff09;no…

排序----希尔排序

void ShellSort(int* a, int n) {int gap n;while (gap > 1){// 1保证最后一个gap一定是1// gap > 1时是预排序// gap 1时是插入排序gap gap / 3 1;for (size_t i 0; i < n - gap; i){int end i;int tmp a[end gap];while (end > 0){if (tmp < a[end]){…

6.C_数据结构_查询_哈希表

概述 哈希表的查询是通过计算的方式获取数据的地址&#xff0c;而不是依次比较。在哈希表中&#xff0c;有一个键值key&#xff0c;通过一些函数转换为哈希表的索引值。 其中&#xff1a;这个函数被称为哈希函数、散列函数、杂凑函数&#xff0c;记为&#xff1a;H(key) 哈希…

MySQL 中的锁定粒度:理解与应用

在 MySQL 数据库的使用中&#xff0c;锁定粒度是一个至关重要的概念。它决定了数据库在并发控制中锁定的范围和程度&#xff0c;对数据库的性能和并发能力有着深远的影响。今天&#xff0c;我们就来深入了解一下 MySQL 中的锁定粒度是什么意思&#xff0c;并通过实际案例来更好…

鸿蒙开发之ArkUI 界面篇 十五 交叉轴对其方式

鸿蒙界面有两个容器一个是Colum、一个是Row&#xff0c;Colum主轴是垂直方向&#xff0c;交叉轴是水平方向&#xff0c;Row的主轴是水平方向&#xff0c;交叉轴是垂直方向&#xff0c;对应方向调整子控件的话&#xff0c;justifyContent调整的是主轴方向的子控件距离&#xff0…

论文阅读-《Attention is All You Need》

注意力就是一切 【要点】&#xff1a;论文提出了一种全新的网络架构——Transformer&#xff0c;完全基于注意力机制&#xff0c;无需使用循环和卷积&#xff0c;实现了在机器翻译任务上的性能提升和训练效率的显著提高。 【方法】&#xff1a;通过构建一个仅使用注意力机制的…

【高分系列卫星简介】

高分系列卫星是中国国家高分辨率对地观测系统&#xff08;简称“高分工程”&#xff09;的重要组成部分&#xff0c;旨在提供全球范围内的高分辨率遥感数据&#xff0c;广泛应用于环境监测、灾害应急、城市规划、农业估产等多个领域。以下是对高分系列卫星及其数据、相关参数和…