2021-07-31信号量

本文介绍了信号量的概念及其在进程互斥和同步中的作用。信号量作为一个整数值对象,用于管理资源和控制进程访问临界区。P操作用于进入临界区,V操作用于退出临界区,确保资源的正确使用和进程间的同步。通过一个例子展示了如何通过信号量实现进程A在进程B之后运行的场景,解释了信号量如何从0到-1再到1的变化过程,确保了进程的正确执行顺序。
摘要由CSDN通过智能技术生成

问题导入:
1)信号量是什么?
2)为什么需要信号量?

1、信号量
一个整值对象,可以表示不同的状态,比如资源的数量,等待获取资源的进程的个数(此时的信号量为负数)。通常用sem来表示。

2、通过信号量以及P/V操作来实现临界区的互斥
互斥:进程不在同一时刻持有资源
系统调用通过两个原子操作来修改信号量
P操作:将sem减去1,如果sem此时小于0,则进程进入阻塞等待,否则继续。
(理解:相当于进程申请使用一个资源,所以资源的数量减去一,如果小于0相当于操作系统还欠着其一个资源)

V操作:将sem 加上一,如果此时sem小于等于0,就唤醒一个等待中的进程。
(理解:相当于进程归还一个资源,所以将资源的数量加上一,若没有等待的进程,sem的值最少为1,若小于1,则说明还有其他的进程在等待,应该唤醒一个进程。

P操作在进入临界区的时候操作(相当于申请登记使用资源,如果没有资源就休眠进入等待)
V操作在出去临界区的时候操作(相当于归还申请使用的资源,并顺带好心的唤醒需要资源的小伙伴)

3、通过信号量以及P/V来实现进程的同步
此时信号量为条件变量:两个进程都会修改信号量,当信号量符合某个特殊的条件的时候,一个特定的进程运行。

(我的理解:让进程A在进程B之后运行。此时的信号量表示状态,只有在某个特定的状态的时候,进程A才开始运行。)
1)例子
初始化:
将初始信号量设置为0
进程A开始运行的时候将信号量减去1
进程B开始运行的时候将信号量加上1

2)过程模拟:
倘若进程A开始运行,先将信号量减去一。
若为-1,则进入阻塞,等待进程B运行后加上1;
若为1,则运行(说明B在A之前已经运行过了)。

倘若进程B开始运行,先将信号量加上1。
若为0,说明此时A还没有运行,直接加上一。
若为-1,说明此时A已经陷入阻塞,加上一后变为0后就可以开始运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值