63、信号量的定义

本文深入探讨了信号量作为进程间通信的一种手段,它通过Wait和Signal原语操作实现资源的互斥访问。信号量分为通用信号量和二进制信号量,其中通用信号量包含计数值和等待队列。在Wait操作中,当资源不可用时,进程会被阻塞并加入等待队列;Signal操作则用于释放资源并唤醒等待的进程。通过对信号量的管理,可以有效避免忙等、饥饿和死锁等问题,提高系统效率。
摘要由CSDN通过智能技术生成


前面了解了软件方式与硬件方式实现互斥的优缺点,再两种方式中,最让人满意的是硬件方式中的机器指令,但是也有不尽人意的地方,如忙等,饥饿,死锁;
所以接下来就有了 信号量的方式来实现互斥;

定义

  • 信号量是一种让进程之间交换信息的特殊的变量
  • 如果一个进程在等待一个信号量的话,那么他就会阻塞自己直到这个信号出现的时候;
  • Wait 和 Signal 操作是原语,是作用于信号量的两种操作,是不能被中断的;
  • 其次,还需要一个队列来让阻塞的进程等待信号量;
  • 信号量中有一个整形量 integer value:
    1、可能会被初始化为一个非负整数;
    2、Wait 和 Signal 都是原语,是一段具有原子性的代码,不能被中断
  • Wait 操作递减信号量值:
    1、wait(s): s - 1;
    2、wait操作:申请使用资源且拿不到资源则阻塞自己(s<0);
  • Signal操作递增信号量值;
    1、signal(s): s + 1;
  • signal操作:释放资源并唤醒阻塞进程(s<=0);

信号量的种类

  • 通用信号量(General Semaphore)
    是一种记录型,其中一个域为整型,另一个域为队列,其元素为等待该信号量的阻塞进程(FIFO);
  • 二进制信号量(Binary Semaphore)

通用信号量

type semaphore = record;
count: integer;
queue: list of process;
end;

var s: semaphore;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值