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

引入:P(S)与V(S)

在表述用信号量机制实现进程的同步与互斥之前,引出PV操作.

  • P(S)-- 申请一个资源S,如果资源不够就阻塞等待.
  • V(S)-- 释放一个资源S,如果有进程在等待该资源,则唤醒一个进程.
  • S代表一个资源,一个整型信号量.

通过PV操作来实现进程的同步,能满足4个同步原则

信号量机制实现进程互斥

一.在什么地方,需要进程的互斥?

在不同的临界区的前后我们需要进行互斥的操作,以实现,这一段时间内,只允许某一个个临界资源被某一个进程所使用.
临界区:是指包含访问共享资源的代码块。为了避免多个进程同时进入临界区,需要使用互斥机制。

二.怎么实现进程的互斥?

在这里插入图片描述

  • 设置初始的互斥信号量mutex=1.
  • 在临界区前,P操作,令mutex值-1,此时mutex=0,继续往下访问,P操作是申请资源,资源数不为0的情况下,申请一个资源,现有资源-1,如果本身没有资源可以申请,则进入等待队列.
  • 在临界区后,V操作,释放一个资源,mutex+1

三.进程互斥的过程思考

进程互斥发生在需要互斥访问的临界区的前后.
上述p1进程和p2的过程,首先p1进程开始,mutex值当前为1,P操作 ,mutex-1,进入p1进程的临界区,此时,p2进程开始,P操作,发现mutex值-1后,小于0,所以此时p2进程进入等待队列,等待p1进程,执行完临界区后,执行V操作,释放资源.然后将p2进程从等待队列中释放出来.

信号量机制实现进程同步

一.为什么要实现进程的同步?

在这里插入图片描述

  • 比如,P1、P2并发执行,由于存在异步性,因此二者交替推进的次序是不确定的。
  • 若P2的“代码4”要基于P1的“代码1”和“代码2”的运行结果才能执行,那么我们就必须保证“代码4”一定是在“代码2”之后才会执行。
  • 这就是进程同步问题,让本来异步并发的进程互相配合,有序推进。

二.在什么地方需要进程的同步?

举例来说,两个进程的某些代码段,存在着次序关系,某一个代码段需要发生在某一个代码段的前面或者后面.
实例,司机需要先停车,然后售票员才能打开车门.此时的司机和售票员就是两个进程,他们各自的动作就是要执行的代码段.

三.怎样利用PV操作实现进程的同步?

在这里插入图片描述
在前操作之后,执行V操作. 在后操作之前,执行P操作,S就是关联二者的信号.
如何理解这一过程?
让代码4在代码2之后执行,初始信号量S=0
先让P2开始执行,此时S=S-1 S=-1 进入等待队列,所以P1开始执行,执行代码1,代码2,直到执行了V操作 S=S+1,进程从等待队列中唤醒,执行代码4,无论此时整个程序是先执行P1的代码3还是P2的代码4,我们都保证了代码4在代码2之后执行.

信号量机制实现进程的互斥和同步的关键记忆点

进程互斥是先P后V.
进程同步是先V后P.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

小徐要考研

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

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

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

打赏作者

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

抵扣说明:

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

余额充值