操作系统之信号量

信号量是一种由E.W.Dijkstra提出的资源管理工具,用于实现进程间的互斥与同步。它包括down和up两种操作,前者用于尝试获取资源,可能导致进程挂起;后者释放资源并可能唤醒等待的进程。在生产者-消费者问题中,信号量帮助维持空槽和满槽的计数,确保正确操作。信号量适用于长时间占用资源的情况,不适用于中断处理,因为可能导致休眠。
摘要由CSDN通过智能技术生成

相关概念

原子操作:指一组相关联的操作要么都不间断地执行,要么都不执行。

二元信号量:供两个或多个进程使用的信号量,保证同时只有一个进程可以进入临界区。

介绍

信号量是E.W.Dijkstra在1965年提出的一种方法,它使用一个整型变量来累计唤醒次数,供以后使用。在他的建议中引入了一个新的变量类型,称作信号量。一个信号量的取值可以为0或者为正值。

操作

简单来说有两种操作方式:down和up

down:检查信号量是否大于0,若大于0,则将值减1,并继续;若信号量为0,则进程将睡眠挂起。

检查数值、修改数值以及可能发生的睡眠操作均作为一个单一的、不可分割的原子操作完成。

up:up操作对信号量的值加1.如果一个或多个进程在该信号量上睡眠,无法完成一个先前的down操作,则由系统选择其中的一个并允许该进程完成它的down操作。

up操作可以唤醒信号量上睡眠的进程,执行一次唤醒一个,但信号量仍会是0。

作用

  1. 互斥

保护共享资源,使得资源在一个时刻只有一个进程(线程)所拥有。

  1. 同步

引用生产者-消费者模型,生产者down操作先将空槽数empty-1,再down操作进入临界区,将数据放到缓存区之后,通过up操作离开临界区,并通过up操作将满槽数full+1,消费者操作则相反。

特点

  1. 因为信号量可以使等待资源线程进入休眠状态,因此适用于那些占用资源比较久的场合。

  1. 信号量不能用于中断中,因为信号量会引起休眠,中断不能休眠。

  1. 如果共享资源的持有时间比较短,那就不适合使用信号量了,因为频繁的休眠、切换线程引起的开销要远大于信号量带来的那点优势。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神秘牢大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值