操作系统——信号量机制——2.10

接下来盘一下信号量机制

1.由来背景

在双标志先检测法中,进入区的“检查”、“上锁”操作无法一气呵成,导致两个进程无法进入临界区。
因此荷兰的学者迪杰斯特拉提出了进程互斥、同步的方法-信号量机制

2.术语

信号量:表示系统中某种资源的数量
原语:执行只能一气呵成,不能被中断
一对原语:wait(S)和signal(S),简称为P、V操作

3.整型信号量

用一个整数作为信号量,用来表示系统中某种资源的数量(相比较普通变量,此整数只能初始化、P、V操作
在这里插入图片描述
在这里插入图片描述

4.记录型信号量 (重点)

解决整型信号量的缺陷“忙等”
引入记录型信号量

typedef struct{
	int value; // 剩余资源数
	struct process *L// 等待队列
}semaphore; 
void wait (semaphore S){
	S.value--;
	if (S.value < 0){
		block (S.L); // 剩余的资源不够,将信号量S挂在到阻塞队列
	}
}
void signal(semaphore S){
	S.value++;
	if (S.value <= 0){
		wakeup(S.L); // 唤醒阻塞队列中的进程,从阻塞态到就绪态
	}
}

5.信号量机制实现前驱关系

每一个前驱各设置一个同步变量
“前操作”之后执行v操作
“后操作”之前执行p操作
在这里插入图片描述

6.信号量机制实现进程同步

设置初始信号量,初始为0
“前操作”之后执行v操作
“后操作”之前执行p操作
保证代码 执行顺序
在这里插入图片描述

7.信号量机制实现进程互斥

设置初始信号量,初始为1
在临界区之前执行p
在临界区之后执行v
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值