信号量---实现同步互斥

【进程同步】使用信号量实现进程同步(附C++实现代码) 从进程同步讲起,阐述了同步的意义,进而详细介绍了信号量如何使用从而保证进程同步。 阅读详情

前言

了解信号量之前,要先了解临界资源、同步与互斥的概念
1.临界资源:在同一时间只能被一个进程调用的资源,也称互斥资源。
2.同步:保证访问的时序可控性,使调用资源的的顺序合理。
3.互斥:在进程调用临界资源是,不同进程之间要竞争该资源,那么一个进程调用了该资源,另一个进程无法再调用该资源的情形就叫互斥!
4.临界区:代码中涉及到了操作临界资源的代码段叫临界区。
5.原子操作:该操作无法被打断
6.同步与互斥的作用:使访问临界资源时,具有安全性。

信号量

1.实质:
具有一个等待队列的计数器,也属于临界资源的一种,要获取信号量资源,则对信号量进行-1操作,要释放信号量资源,则对信号量资源进行+1操作。
注:信号量操作是原子操作

2.信号量实现同步
原理:进程获取临界资源之前,要先获取信号量资源;
若无信号量资源,则该进程阻塞等待,进入等待队列。
若有信号量资源,则对信号量进行P(-1)操作,再获取临界资源。
当临界资源+1时,对应的信号量资源则执行V(+1)操作,然后唤醒在等待队列中等待获取临界资源的进程。
实现代码:https://gitee.com/free_xin/codes/gdof7qb2y58mr4p9alj1u98(代码过长,博客不易展示)

结果展示:
在这里插入图片描述

3.信号量实现互斥
原理:一个进程获取了该临界资源之后,另一个进程无法再访问该临界资源。
实现互斥,采用一元信号量,即:该信号量的计数器,只能为0或1。
一个进程要获取临界资源时,先获取对应的信号量资源;
当无信号量资源时,则该进程阻塞等待,进入等待队列。
当有信号量资源时,则对该信号量资源进行P(-1)操作,然后获取该临界资源。
当该进程使用完临界资源时,将释放信号量资源(对信号量资源进行V(+1)操作),然后唤醒等待队列中的进程。
实现代码:https://gitee.com/free_xin/codes/gdof7qb2y58mr4p9alj1u98(代码过长,博客不易展示)

结果展示:
在这里插入图片描述

4.创建信号量集(信号量的一个集合,一个数组)
int semget(key_t key, int nsems, int semflg);
key:该信号量集的标识符(名字)
nsems:信号量集中信号量的个数
semflg:标志位(IPC_CREST|0644)
成功返回该信号量集的标识码,失败返回-1

5.初始化信号量的计数值
int semctl(int semid, int semnum, int cmd, …[union semun]);
semid:该信号量集的标识码
semnum:信号量集中的信号量的索引(下标、序号)
cmd:将要采取的动作
…:不定参数,是semun联合体,用来传递给cmd的参数
成功返回0,失败-1
注:初始值只能设置一次

cmd选项:
SETVAL:设置信号量集中一个信号量的初始计数值,其值是union semun.val的值,此时需要第四个不定参数选项。
SETALL:设置信号量集中所有信号量的初始计数值。
IPC_RMID:用于删除该信号量集,不需要不定参数。
GETVAL:用于获取该信号量集中一个信号量的计数值。

semun联合体:
在这里插入图片描述

6.访问信号量资源(对其进行+1/-1操作)
int semop(int semid, struct sembuf sops, unsigned nsops);*
semid:该信号量集的操作句柄
sops:用来操作信号量进行+1/-1操作的结构体的指针
nsops:信号量的个数
成功返回0,失败返回-1

信号量+1/-1操作的结构体:
在这里插入图片描述

7.删除信号量集资源
semctl中cmd选项为IPC_RMID,即删除信号量集资源。

其删除实质类似于共享内存的删除,大家可以参考:https://blog.youkuaiyun.com/Code_ZX/article/details/85003916

8.信号量集的命令操作
ipcs -s:查看
ipcrm -s +semid:删除semid为semid的信号量集资源
ipcrm -S +key:删除为key的信号量集资源

关于进程的其他内容,大家可以访问主页!!
请多多指教!!
在这里插入图片描述

信号量机制实现进程的互斥、同步、前驱 1965年,荷兰学者Dijkstra提出了一种卓有成效的实现进程互斥、同步的方法——信号量机制 信号量其实就是一个变量(可以是一个整数,也可以是一个更复杂的变量),可以用信号量来表示系统中某种资源的数量。比如:系统中只有一台打印机,就可以设置一个初值为1的信号量。 P、V操作: P表示通过,V表示释放 1.整型信号量: 整型信号量与普通的信号量的区别: 对信号量的操作只有:初始化、P操作、V操作 缺点:不满足“让权等待”原... 阅读详情

相关推荐

【互斥锁与信号量】线程通信:互斥锁(mutex)与信号量(semaphore)

总的来说,互斥锁和信号量都是线程和进程同步的重要工具。互斥锁主要用于保护资源,保证同一时间只有一个线程或进程访问某一资源,从而避免并发问题。而信号量更多的是用于线程和进程之间的通信和同步,控制在一定范围内的并发访问,为程序提供更细粒度的并发控制。 掌握互斥锁和信号量的使用和区别,能极大地提高多线程和多进程编程的效率和稳定性。

crr411422的博客 3913

信号量实现同步与互斥(学习笔记)

信号量基本操作与使用

weixin_47783699的博客 3532

二、操作系统——用信号量机制实现进程互斥、同步、前驱关系(详解)

一、什么是进程同步? 二、什么是进程互斥? 临界资源:一个时间段内只允许一个进程使用的资源 为了实现对临界资源的互斥访问,同时保证系统整体性能,需要遵循以下原则: 空闲让进。临界区空闲时,可以允许一个请求进入临界区的进程立即进入临界区; 忙则等待。当已有进程进入临界区时,其他试图进入临界区的进程必须等待; 有限等待。对请求访问的进程,应保证能在有限时间内进入临界区(保证不会饥饿); 让权等待。当进程不能进入临界区时,应立即释放处理机,防止进程忙等待。 注意: 5. 进程同步也可以说是进程之间的直

zep 1万+

信号量实现同步互斥经典案例

信号量同步经典案例分享

向往天空的鱼 4946

用信号量实现进程互斥、同步、前驱关系

信号量机制实现进程互斥 1.分析并发进程的关键活动,划分临界区(如:对临界资源打印机的访问就应放在临界区) 2.设置互斥信号量mutex,初值为1 3.在临界区之前执行P(mutex) 4.在临界区之后执行V(mutex) 注意: 对不同的临界资源需要设置不同的互斥信号量 P、V操作必须成对出现。缺失P(mutex)就不能保证临界资源的互斥访问。缺失V(mutex)会导致资源永不被释放,等待进程永不被唤醒。 // 信号量机制实现互斥 semphore mutex = 1; //.

LOOKTOMMER的博客 3048

电芯外观及体系设计(Cell Design)-①容量平衡设计(Cell Balance Design)

全面获取并正确解读客户需求,将需求进行分解和预判,结合公司现有资源、技术,给出设计方案。一个优秀的电芯设计方案,应该是稳健的,可操作的,满足客户需求的同时,并能为公司带来较多利润。电芯设计需同时考虑周期,性能,品质,加工性,成本,及安全与稳健性。设计人员时刻要有成本控制观念,但利润则是由公司战略所决定。

FDC1303864002的博客 1352

信号量机制及信号量实现进程同步、互斥、前驱关系

进程互斥的四种软件实现万式(单标志法、双标志先检查、双标志后检查、Peterson算法)进程互斥的三种硬件实现方式(中断屏蔽方法、TS/TSL指令、Swap/XCHG指令) 1.在双标志先检查法中,进入区的“检查”、“上锁”操作无法一气呵成,从而导致了两个进程有可能同时进入临界区的问题: 2.所有的解决方案都无法实现“让权等待”。用户进程可以通过使用操作系统提供的一对原语来对信号量进行操作,从而很方便的实现了进程互斥、进程同步。

leimeili的博客 1481

基于ROS2的无人机野生动物巡查系统设计

自主巡检系统是嵌入式人工智能与机器人技术融合的关键应用方向,其核心在于多源感知融合、实时路径规划与端侧智能识别的协同实现。原理上依赖SLAM定位构建环境地图,结合栅格化建模与混合路径算法(如蚁群+BFS)达成全覆盖遍历;技术价值体现在资源受限平台下的确定性响应与时空对齐能力,支撑高鲁棒性野外作业。典型应用场景包括生态监测、禁飞区巡检及小尺度智能安防。本文围绕ROS2 Humble中间件架构、Livox激光雷达与MaixCAM视觉协同、YOLO11n INT8模型端侧部署等关键技术展开,突出嵌入式AI与实时控

weixin_30598047的博客 649

认识信号量机制、以及用信号量来实现进程互斥于进程同步

信号量机制是操作系统实现进程同步与互斥的重要工具。整型信号量通过P/V原子操作管理资源,但存在忙等问题。记录型信号量引入等待队列,资源不足时进程阻塞,满足"让权等待"原则。信号量可灵活实现两类应用:互斥信号量(初值1)保护临界区,同步信号量(初值0)控制执行顺序。相比互斥锁,信号量功能更强大,能同时管理多种资源并支持复杂进程协作。P/V操作的原子性确保资源计数准确,避免并发错误。

重做解斑的博客 1108

uniapp原生安卓插件开发之路

声明: 我的功能需求:全局悬浮框,也就是在其他应用上依旧能悬浮。查遍uni文档,无法实现,甚至native.js也无法实现,无奈只能走上原生插件开发这条不归路了。(吐槽:天天写前端js,突然写了下android简直要炸,public static String啥的,var不香嘛,不过别人严谨肯定还是有别人道理的,加油吧,争取能入个门!) 本人不懂安卓开发,完全安卓小白,所以安卓方面可能表达的不是很好,安卓代码可能写的不优美,但我功能最终还是实现了。但是为了需求,能力总能被“逼”出来。有描述错误的还望指正

Jone's Area 1万+

WSL 相关命令时遇到了 “无法从raw.githubusercontent.com提取分发列表、操作超时

核心问题:国内网络屏蔽raw.githubusercontent.com,导致WSL无法获取发行版列表;最优方案:优先用方案1(手动指定发行版安装),无需改配置,1分钟搞定;永久修复:用方案2(修改hosts),适合需要管理多个WSL发行版的场景;兜底方案:用方案3(手动下载安装包),适配所有网络环境。按以上步骤操作后,你不仅能正常安装WSL,等命令也能正常执行,后续可正常使用WSL搭配Docker Desktop(如切换WSL 2后端),无需再担心网络超时问题。

weixin_39766667的博客 2139

实现进程互斥和同步的信号量机制

利用硬件技术和信号量机制实现进程同步机制、实现进程互斥和同步的信号量机制

m0_63141132的博客 1758

手把手教你搞定国民技术N32G031的Keil开发环境(附Pack包和JLink配置)

本文详细指导如何搭建国民技术N32G031的Keil开发环境,包括Keil MDK安装与激活、Pack包导入、JLink调试器配置等关键步骤。特别针对新手常见问题提供解决方案,帮助开发者快速上手N32G031系列MCU的开发工作。

cuangu9341的博客 424

信号量-实现进程互斥,同步

一、实现进程互斥 1.分析并发进程的关键活动,划定临界区(如:对临界资源打印机的访问就应放在临界区) 2.设置互斥信号量mutex,初值为1 3.在临界区之前执行P(mutex) 4.在临界区之后执行V(mutex) 注意: 对不同的临界资源需要设置不同的互斥信号量。 P、V操作必须成对出现。缺少P(mutex)就不能保证临界资源的互斥访问。缺少V(mutex)会导致资源永不被释放,等待进程永不被唤醒。 二、实现进程同步 因为进程并发,所以进程的执行顺序是不确定的 进...

m0_52559870的博客 4241

Debezium报错处理系列之二十八: Expiring 1 record(s) for test-ts-0:120001 ms has passed since batch creation

Debezium报错处理系列之二十八: Expiring 1 record(s) for test-ts-0:120001 ms has passed since batch creation

zhengzaifeidelushang的博客 3290

三、参考比较法之城市建成区提取——提取

在正式开始提取之前,还是要继续啰嗦一下,其实基于夜间灯光数据建成区提取,可以分为好几个层次,基于县一级、市一级、省一级,很多论文的做法都是以市一级为准,也就是统计好市一级城市的每一年的统计年鉴中的建成区面积作为备用。有人可能会问为什么不以县一级,由于县一级的统计数据一般存在缺失,很难形成一个长时间序列的数据,所以一般采取的是市一级。前文也进行建议,如果确实要基于县一级进行提取可以参考前面理论介绍那篇文章中的相关建议。那么当我们确定阈值后如何将城市建成区提取出来?

端木宛白的博客家园 5401

linux信号量实现进程间同步与互斥

什么是同步与互斥 同步与互斥是进程间的制约关系, 同步: 是为了保证临界资源的时序的可控性,安全性。是进程间由于相互合作引起的直接制约关系。 互斥: 是为了保证对临界资源同一时间的唯一访问性。是进程间由于共享资源引起的间接制约关系。 多个进程当需要操作同一资源的时候就需要通过同步和互斥机制来实现对临界资源的安全访问。 什么是临界资源 临界资源就是:一次只允许一个进程访问的资源。 什么是信号量 从本...

坚持不懈做贡献 8050

YOLOv11的QAT(训练感知量化)实战

本文总结了YOLO模型量化感知训练(QAT)的实践要点:QAT通过模拟量化噪声训练模型,比训练后量化(PTQ)更适合密集预测任务。关键实现包括:1)配置对称/非对称量化器;2)排除检测头量化;3)调整学习率策略并添加量化正则;4)选择困难样本校准;5)转换前稳定BN统计量。调试时需检查量化范围、数值分布和逐层突变,并注意SPP等敏感层。建议小模型使用QAT,大模型可能适得其反,且TensorRT的FP16模式可能优于INT8-QAT。量化应以功能正确为前提,避免过度优化。

as1225120794的博客 510

Linux 信号量实现同步,实现互斥

一.实现同步 同步模板 使用信号量实现同步时,需要将信号量的初值设置为0 semaphore s=0; p1() { p(s); 具体的代码 } p2() { 具体的代码 v(s); } 1.假设p1先执行,执行到p(s), s-=1, 此时s=-1<0,进程阻塞,主动放弃cpu使用权,cpu调度执行p2,执行p2的具体任务,然后进行v(s),,s+=1,s=0,p2执行完毕。cpu调度继续执行p1,此时s=0,p1被唤醒,因此就达到了先执行p2后执行p1的同步关系。 2.假设p2先执行

乐行僧的博客 763

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

!操作系统 —— 7 信号量和管程实现同步和互斥

信号量和管程1 背景2 信号量3 信号量使用3.1 用二进制信号量3.1.1 实现互斥3.1.2 实现同步互斥3.2 更复杂的同步互斥不能用简单的二进制信号量来解决(条件同步)4 信号量实现5 管程6 经典同步问题 1 背景 研究信号量和管程如何解决同步和互斥的问题 锁机制解决互斥 需要更高级的同步互斥语义,还可以借助硬件原子操作来实现更高层的同步互斥 进入临界区的进程或线程若只是做读操作,则.........

qq_42713936的博客 1933

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【操作系统-33】用信号量实现同步,互斥

信号量是操作系统中一种非常常见的同步原语,它能够有效地解决进程间的同步和互斥问题。(Binary Semaphore)和在进程同步和互斥中,信号量的应用十分广泛。

m0_69378371的博客 1238

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

信号量实现互斥和同步的原理

无

一名在校大三学习JAVA 866

进程同步、互斥,用信号量机制实现互斥

原视频链接 进程同步: 实际是用来表述不同进程之间存在制约关系。 进程互斥: 进程互斥的软件实现方法: 进程互斥硬件实现方法: 中断屏蔽方法: TestAndSet指令 TS指令: Swap指令 又称 Exchange 或XCHG指令。 信号量机制 ...

Jassicar的博客 646

操作系统原理 —— 什么是信号量,信号量如何实现进程互斥、进程同步?(十五)

信号量可以这么简单的来理解,它其实就是一个变量,这个变量可以是一个整数,也可以是更复杂的记录型变量,可以用一个信号量来表示系统中某种资源的数量。比如:系统中只有一台打印机,就可以设置一个初始值为 1 的信号量。那怎么操作这个信号量变量呢?那么就是原语。原语是一种特殊的程序段,这个程序段它是能够保证原子性操作的,执行只能一气呵成,不能被中断。至于为什么原语能够保证原子性,是因为开中断/关中断这两个指令来实现的。知道原语的特性之后,那什么原语能够操作信号量呢?

贱男 3814

信号量机制实现进程的同步与互斥

在表述用信号量机制实现进程的同步与互斥之前,引出PV操作.通过PV操作来实现进程的同步,能满足4个同步原则。

weixin_62613321的博客 773
上一篇: 进程间通信------共享内存
下一篇: volatile关键字
Code_zx
博客等级 码龄9年 83粉丝 38原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值