- 1、本文档共16页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
第八章进程同步机制与死锁
习题
1.何谓与时间有关的错误?举例说明之。并发进程执行时一定会产生与时间有关的错误吗?为什么?
在并发程序中共享了公共变量,使得程序的计算结果与并发程序执行的速度有关。这种错误的结果又往往是与时间有关的,所以,把它称为“与时间有关的错误”。也就是,程序的正确性和结果受到程序执行的具体时序和时间点的影响,导致不同的执行时机产生不同的结果。例如,两个并发程序A和B共享一个公共变量n,程序A每执行一次循环都要作n=n+1操作,程序B则在每一次循环中打印出n的值并将n重新置0。程序A和B的语句在时间上可任意穿插或交叉执行,则程序A的①n=n+1操作可能在程序B的②print(n)和③n=0操作之前,也可能在它们之后或它们之间(即①出现在②之后,而在③之前),设在开始某个循环之前n的值为5,则对于上面三种情形,执行完一个循环后,打印机印出的值分别为6、5和5,而执行后的n值分别为0,1,0。这样,相同的程序在可能的三种情况下,由于程序执行的具体时序而产生了三组不同的结果。这就是与时间有关的错误。
并发程序执行时不一定会产生与时间有关的错误。并发执行的程序有可能是无关进程,并且正确设计和实现的并发系统可以有效避免与时间有关的错误。
2.什么是临界区?
若系统中某些资源一次只允许一个进程使用,则这类资源称为临界资源,在进程中访问临界资源的程序称为临界区。
3.若用P、V操作管理某一组相关临界区,其信号量S的值在[-1,1]之间变化,当S=-1,S=0,S=1时,它们各自的物理含义是什么?
当S=-1时,表示当前有进程正在该临界区执行,另一个访问相同临界区的进程正在等待(等待队列进程数目是1)。当S=0时,表示当前有一个进程正在该临界区执行,没有进程等待访问该临界区。当S=1时,表示当前空闲资源数为1,可以允许进程进入该临界区。
4.两个并发执行的进程A和B的程序如下:
进程A
While(true){
N=N+5;
};
进程B
While(true){
打印N的值;
N=0;
};
其中,N为整数,初值为4。若进程A先执行了三个循环后,进程A和进程B又并发执行了一个循环,写出可能出现的打印值。正确的打印值应该是多少?请用P、V操作进行管理,使进程A和B并发执行时不会出现与时间有关的错误。
可能的打印值为19、24.正确的打印值为24.P、V操作管理如下:
初始时,设置两个信号量:S1=1,S2=0。
进程A:
While(true){
P(S1);
N=N+5;
V(S2);
};
进程B:
While(true){
P(S2);
打印N的值;
N=0;
V(S1);
};
5.a,b两点之间有一段单行车道,现在设计一个自动管理系统,管理规则如下:允许同方向的车同时驶入ab段,但另一方向的车必须在ab段外等待;当ab之间无车辆在行驶时,到达a点(或b点)的车辆可以进入ab段,但不能从a点和b点同时驶入;当某方向在ab段行驶的车辆驶出了ab段且暂无同方向车辆进入ab段时,应让另一方向等待的车辆进入ab段行驶。请编写程序,用P、V操作实现对ab段的正确管理以保证行驶安全。
初始化全局变量Ca=0,Cb=0分别表示从ab路段上从a点驶入的车辆数和ab路段上从b点驶入的车辆数。初始化三个信号量Sa=1,Sb=1,Sr=1.其中Sa控制Ca的访问,Sb控制Cb的访问,Sr表示当前ab路段是否已有车辆的信号量。
对于从a点驶入的车辆,运行以下程序:
P(Sa);//请求访问从a点驶入的车辆数
if(Ca==0)P(Sr);//ab路段没有从a点驶入的车辆,需要获得驶入权限
Ca=Ca+1;
V(Sa);
从a点驶向b点;
P(Sa);//请求访问从a点驶入的车辆数
Ca=Ca-1;
if(Ca==0)V(Sr);
V(Sa);
类似地,对于从b点驶入的车辆,运行以下程序:
P(Sb);
if(Cb==0)P(Sr);
Cb=Cb+1;
V(Sb);
从b点驶向a点;
P(Sb);
Cb=Cb-1;
if(Cb==0)V(Sr);
V(Sb);
6.有三个并发进程R、M、P,它们共享一个缓冲器B。进程R负责从输入设备读信息,每读出一个记录后把它存放在缓冲器B中,进程M在缓冲器B中加工进程R存入的记录,进程P把加工后的记录打印输出。缓冲器B中每次只能存储一个记录,当记录被加工输出后,缓冲器B中又可存储一个新记录。请用P、V操作为同步机制写出它们并发执行时能正确工作的程序。
初始化
文档评论(0)