欢迎来到天天文库
浏览记录
ID:59319792
大小:36.00 KB
页数:2页
时间:2020-09-05
《请用PV操作解决读者和写者问题.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、请用PV操作解决读者和写者问题。有两组并发进程:读者和写者,共享一个文件,要求:(1)允许多个读者同时执行读操作(2)在任意写者在完成写操作之前,不允许其他任意的读者和写者工作3写者预工作,但在它之前已有读者在执行读操作,那么,待现有读者完成读操作后在执行写操作,新的读者和写者均被拒绝。Samaphermatex=1/*对文件互斥*/S1=1/*对Readcount互斥*/Readcount=0读者记数器。Reader:Writer:P(S1);P(mutex);Readcount++;Writeafile;V(S1);V(mutex
2、);Readafile;P(S1);Readcount--;If(Readcount==0)V(mutex);V(S1);设由n个缓冲区组成缓冲池,每个缓冲区可以存放一个消息,有两类进程:x个生产者和y个消费者,且只要缓冲池未满,生产者便可以将消息送入缓冲池,而只要缓冲池未空,消费者就可以取走一个消息。各个进程对缓冲池进行互斥访问,用信号量实现协调过程。要求写出使用的信号量、初值及其作用,并写出生产者进程和消费者进程的处理流程(10分)某寺庙共有老和尚和小和尚若干人,庙外有一口井,只能容一人打水,庙内有6只水桶和一口缸,缸内最多能装3
3、0桶水,每只桶每次只能由一人使用,缸每次只能由一人使用。小和尚负责从庙外的井里打水,老和尚使用缸里的水,老和尚取水的单位是桶。请利用信号量和P、V操作描述老和尚和小和尚的活动。semaphoreempty=30;//表示缸中目前还能装多少桶水,初始时能装30桶水semaphorefull=0;//表示缸中有多少桶水,初始时缸中没有水semaphorebuckets=6;//表示有多少只空桶可用,初始时有6只桶可用semaphoremutex_well=1;//用于实现对井的互斥操作semaphoremutex_bigjar=1;//用
4、于实现对缸的互斥操作semaphoremutex_buchet=1;//用于实现对桶的互斥操作,防止多人同时拿同一只桶yongermonk(){while(1){P(empty);P(buckets);P(mutex_bucket);getabucket;V(mutex_bucket);gotothewell;P(mutex_well);getwater;V(mutex_well);gotothetemple;P(mutex_bigjar);purethewaterintothebigjar;V(mutex_bigjar);V(buc
5、kets);V(full);}}oldmonk(){while(1){P(full);P(buckets);P(mutex_bucket);getabucket;V(mutex_bucket);P(mutex_bigjar);getwater;V(mutex_bigjar);V(buckets);V(empty);}}
此文档下载收益归作者所有