预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

在线预览结束,喜欢就下载吧,查找使用更方便

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

编号:时间:2021年x月x日书山有路勤为径,学海无涯苦作舟页码:第PAGE10页共NUMPAGES10页第PAGE\*MERGEFORMAT10页共NUMPAGES\*MERGEFORMAT10页生产者和消费者问题1、有n个缓冲区,一个生产者和一个消费者情况:main(){intS=1;//可否进入缓冲区intfull=0;//产品数目intempty=n//可用缓冲区数intbuffer[n];intin=0;//指向下一个可放产品的缓冲区intout=0;//指向下一个可取产品的缓冲区producer();consumer();}producer(){While(生产未结束){produceaproductP(empty);P(S);Buffer[in]=product;in=(in+1)modn;V(S);V(full);}}consumer(){While(消费未结束){P(full);P(S);TakeaproductfromBuffer[out]Out=(out+1)modn;V(S);V(empty);}Consumetheproduct}2、m个生产者和k个消费者共享n个缓冲区的情况:main(){intB[n];//缓冲区intp=r=0;//p表示生产者指针,r表示消费者指针intS=1;//可否进入缓冲区intfull=0;//产品数目intempty=n;//可用缓冲区数producer-i(i=1,2,…,m);consumer-j(j=1,2,…,k);}Producer-i(i=1,2,…,m){while(producingdoesnotend){produceaproductP(empty);P(S);B[p]=product;p=(p+1)modn;//每放入一个产品,位置指针后移一位V(S);V(full);}}Consumer-j(j=1,2,…,k){while(continuetoconsume){P(full);P(S);TakeaproductfromB[r]r=(r+1)modn;//从第一个开始,消费一个后,指向下一个V(S);V(empty);Consume}}读者与写者问题读者与写者有相同的优先级的情况:main(){intS=1;//读者与写者,写者与写者间的互斥,即可否修改文件intSr=1;//可否修改读者个数intrc=0;//读者个数reader();writer();}reader(){While(读过程未结束){P(Sr);if(rc==0){P(S);rc=rc+1;V(Sr);readfileF}else{rc=rc+1;V(Sr);readfileF}P(Sr);rc=rc-1;if(rc==0)V(S);V(Sr);}}writer(){While(写过程未结束){P(S);WritefileFV(S);}}2、写者优先问题:main(){intS=1;//读者与写者,写者与写者间的互斥,即可否修改文件intSn=n;//最多有n个进程可以同时进行读操作reader();writer()}reader(i){P(S);P(Sn);V(S);ReadfileFV(Sn);}writer(j){P(S)WritefileFV(S);}例题有一个阅览室,读者进入时必须先在一张登记表上进行登记。该表为每一座位列出一个表目,包括座号、姓名。读者离开时要撤消登记信息。阅览室有100个座位,试问:为描述读者的动作,应编写几个程序?,应该设置几个进程?进程和程序之间的关系如何?试用P、V操作描述这些进程之间的同步算法。若系统有某类资源m*n+1个,允许作业执行过程中动态申请该类资源,但在该系统上运行的每一个作业对该类资源的占有量在任一时刻都不会超过m+1个。当作业申请资源时,只要资源尚未分配完,则总能满足它的要求。但用限制系统中可同时执行的作业个数来防止死锁。你认为作业调度允许同时执行的最大作业数应为多少?证明之。3、若系统有同类资源m个,被n个进程共享,试问:当m>n和m<n,每个进程最多可申请多少个这类资源而使系统一定不会发生死锁?SFPaPbPc4、设Pa,Pb,Pc为一组合作进程,其进程流程图如下所示。试用信号灯的P、V操作实现这三个进程的同步。5、医生给病人看病,需要化验,