进程的同步与互斥
互斥:
在同一时刻,只允许某一个进程使用资源,同一个资源不能同时服务于多个进程。
例如:
单人独木桥,在同一时刻桥只服务于一人,同一时刻只允许一人通过,其他人只能等待他通过之后才能逐个继续通过。
与互斥相反的是共享:
例如:过街天桥,同一时刻可通过多人,同一时刻可以服务于多个进程
同步:
速度有差异,在一定情况下停下等代
例如:
张三和李四同时从A点到B点,相同地点相同路径,张三骑车,李四走路,明显张三速度要快于李四,等差距较大时,张三停下等等李四两人一起到达。
实例:
讨论下图哪里存在互斥哪里存在同步
互斥情况:
单缓冲区,同一时刻只允许一人(生产者或者消费者其中一个人)进行操作,一次只能存放一个物品,满足在同一时刻,只允许某一个进程使用资源,同一个资源不能同时服务于多个进程。此为互斥。
同步情况:
单缓冲区只能放入一个物品,生产者放入一个物品后不能继续放入第二个,需等消费者将物品拿走之后才能继续放入,满足速度有差异,在一定情况下停下等代,此为同步。
同步情况:
多缓冲区能放入多个物品,生产者放满之后不能继续存放,需等消费者将物品拿走之后才能继续放入,满足速度有差异,在一定情况下停下等代,此为同步。
综上:同步与互斥在同一题目中可能同时存在
PV操作
临界资源:
诸进程之间需要以互斥方式对其进行访问的共享资源,如打印机,或上述问题中的独木桥;
临界区:
临界区是代码段,是每个进程中访问临界资源的那段代码
信号量:
存在于PV进程内部的一种变量,例如下面的变量S
P操作和V操作流程
PV操作例题:
题目中如果引入PV操作在运作的过程中极易出错:(单缓冲区只能存放一个产品)比如:
若生产者进程先运行,生产者持续生产产品并送到单缓存区,而消费者还未消费此时生产过多造成单缓冲区溢出;
若消费者进程先运行,消费者从缓冲区 取产品进行消费,此时生产者尚未生产,进程会出错
PV操作的作用:
是解决某些并发进程中间某些约束(例如:先后等)。
P操作的特点:
可以阻塞本流程P操作之后的操作(做题中常用)
V操作的特点:
可以唤醒被阻塞的操作(做题中常用)
例题:
在此类题目考察PV操作的应用,那么切入点一般是PV操作的作用(某些并发操作之间的约束关系)答案:AC
因此从并发操作之间的约束关系入手可看出:
付款操作购书者进程无法独立完成,收费动作也不能由收银员独立完成,所以二者之间存在配合或交互等约束关系;
收银员进程只能是等待购书者唤醒之后才能进行收银操作,在未唤醒时只能处在阻塞状态,所以b1出应该是P操作阻塞后续收费流程;
付款操作购书者不能独立完成,因此到此步骤之后需要购书者唤醒收银员,唤醒需要用到V操作,所以a1处应该是V操作;
唤醒收银员之后,购书者需要等待收银员完成收银进程再进行下步操作;
因此a1处唤醒收银员之后需要立即阻塞购书者进程a1操作之后的操作,所以a2此处应该用P操作完成阻塞动作;
收银员流程完成收费操作之后需要唤醒被阻塞的购书者进程,使购书者进程继续运行付款之后的操作,所以b2处应该用V操作来唤醒购书者进程;
关系(同组PV操作相同信号量)
购书者流程中a1处V操作唤醒的是收银员流程中b1处被P操作阻塞的操作,所以a1,b1为是一组PV操作,运用相同信号量;
收银员流程中b2处V操作唤醒的是购书者流程中a2处P操作被阻塞的操作,所以a2,b2为是一组PV操作,运用相同信号量;
PV操作与前驱图
用PV 操作对前驱图中的操作进行先后限制
PV操作对前驱图中进程的影响:
P操作的阻滞功能一般作为“锁”来限制某项进程,使其在解锁之后才能运行;
V操作的唤醒功能一般作为“钥匙”来解锁某项进程;
例如右侧图中,先运行D是无法运行的,需要先运行ABC进程之后用其进程末尾的V(A),V(B),V(C)唤醒对D进程中的P(A),P(B),P(C),对其进行解锁之后才能运行D进程,进而解锁E进程
在前驱图与PV操作结合的题目中,一般主要考察PV操作对前驱图中各项进程的锁定与解锁;
例子:
此题考察前驱图中PV操作的锁定与解锁,答案:CAA
首先应对进程P4,P5用P操作进行锁定,使其只能在进程P3执行完毕之后运行V操作解锁之后才能运行;
在进程P3后设立V进程,使P3运行完毕之后可以用V进程解锁P4,P5;
再对进程P3用P操作进行锁定;使其只能在P1,P2进程均执行完毕之后才能运行;
在P1,P2进程之后设立V操作,用来解锁P3进程的锁定;
所以题目中
进程P1后a处应是V(P1);用来解锁进程P3执行前c处的P(P1);
进程P2后b处应是V(P2);用来解锁进程P3执行前c处的P(P2);
进程P3执行后的d处应是V(P4),V(P5)用来解锁进程P4,P5执行之前e,f处的P(P4),P(5);
另:此类题目中如有多个信号量,如此题中的S1,S2,S3,S4;其分布顺序一般为 左-->右;上-->下;
所以:
a-->V(S1); b-->V(S2); c-->P(S1),P(S2); d-->V(S3),V(S4); e-->P(S3); f-->P(S4);