进程同步练习题

进程同步练习题

ID:38095999

大小:52.00 KB

页数:8页

时间:2019-06-06

进程同步练习题_第1页
进程同步练习题_第2页
进程同步练习题_第3页
进程同步练习题_第4页
进程同步练习题_第5页
资源描述:

《进程同步练习题》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、进程同步练习题1.第二类读者写者问题,信号量解决方法答:为了使写者优先,可在原来的读优先算法的基础上增加一个互斥信号量s,初值为1,使得当至少有一个写者准备访问共享对象时,它可以使后续的读者进程等待完成;整型变量writecount,初值为0,用来对写者进行计数;互斥信号量mutex,初值为1,用来实现多个读者对写者writecount进行互斥访问。Processreader(){while(1){wait(s);wait(rmutex);if(readcount==0)wait(wmutex);readcount++;signal(rmutex);signal(s);perf

2、ormreadoperation;wait(rmutex);readcount--;if(readcount==0)signal(wmutex);signal(rmutex);}}Processwriter(){while(1){wait(mutex);if(writecount==0)wait(s);writecount++;signal(mutex);wait(wmutex);performwriteoperation;signal(wmutex);wait(mutex);writecount--;if(writecount==0)signal(s);signal(mute

3、x);}}Main(){cobegin{reader();writer();}}2.复印室里有一个操作员为顾客复印资料,有5把椅子供顾客休息等待复印。如果没有顾客,则操作员休息。当顾客来到复印室时,如果有空椅子则坐下来,并唤醒复印操作员;如果没有空椅子则必须离开复印室。答:信号量:customers表示正在等待复印的顾客数量(不包括正在复印的顾客)operator记录正在等候顾客的操作员数,只有1和0mutex用于对waiting的访问;变量:waiting表示等待的顾客数量。它实际上是customers的一个副本。之所以使用waiting是因为无法读取信号量的当前值。sema

4、phorecustomers=0,operator=0,mutex=1;waiting=0;processoperator()//操作员进程{while(1){wait(customers);//等待顾客到来复印;signal(operator);//通知顾客已经完成复印}}processcusotmeri()//顾客进程i{wait(mutex);if(waiting<5){waiting++;signal(customers);signal(mutex);wait(operator);wait(mutex);waiting--;signal(mutex);}else{sig

5、nal(mutex);离开复印室;}}main(){cobegin{operator();customeri();}}3、如果有三个进程R、W1、W2共享一个缓冲器B,而B中每次只能存放一个数。当缓冲器中无数时,进程R可以将从输入设备上读入的数存放到缓冲器中。若存放到缓冲器中的是奇数,则允许进程W1将其取出打印;若存放到缓冲器中的是偶数,则允许进程W2将其取出打印。同时规定:进程R必须等缓冲区中的数被取出打印后才能再存放一个数;进程W1或W2对每次存入缓冲器的数只能打印一次;W1和W2都不能从空缓冲中取数。写出这三个并发进程能正确工作的程序。答:S为互斥信号量,用来对缓冲器的互

6、斥使用;SO和SE为资源信号量,SO表示是否允许进程W1打印;SE表示是否允许进程W2打印。semaphoreS=1,SO=SE=0;bufferB;processR(){intx;while(1){从输入设备上读一个数;x=接收的数;wait(S);B=x;ifB=奇数thensignal(SO);elsesignal(SE);}}processW1(){inty;while(1){wait(SO);y=B;signal(S);打印y中数;}}processW2(){intz;while(1){wait(SE);z=B;signal(S);打印z中数;}}main(){cob

7、egin{R();W1();W2();}}4.现有四个进程R1、R2、W1、W2,它们共享可以存放一个数的缓冲器B。进程R1每次把来自键盘的一个数存入缓冲器B中,供进程W1打印输出;进程R2每次从磁盘上读一个数存放到缓冲器B中,供进程W2打印输出。为防止数据的丢失和重复打印,问怎样用信号量操作来协调这四个进程的并发执行。答:S:互斥访问缓冲器S1:是否可以供进程W1打印输出S2:是否可以供进程W2打印输出semaphoreS=1,S1=S2=0;bufferB;processR1(){int

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。