请用PV操作解决读者和写者问题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
请用PV操作解决读者和写者问题。有两组并发进程:读者和写者,共享一个文件,要求:(1)允许多个读者同时执行读操作(2)在任意写者在完成写操作之前,不允许其他任意的读者和写者工作 3写者预工作,但在它之前已有读者在执行读操作,那么,待现有读者完成读操作后在执行写操作,新的读者和写者均被拒绝。Samapher matex=1/*对文件互斥*/
S1=1/*对Readcount互斥*/
Readcount=0读者记数器。
Reader: Writer:
P(S1); P(mutex);
Readcount++; Write a file;
V(S1); V(mutex);
Read a file;
P(S1);
Readcount--;
If(Readcount==0) V(mutex);
V(S1);
设由n个缓冲区组成缓冲池,每个缓冲区可以存放一个消息,有两类进程:x个生产者和y 个消费者,且只要缓冲池未满,生产者便可以将消息送入缓冲池,而只要缓冲池未空,消费者就可以取走一个消息。各个进程对缓冲池进行互斥访问,用信号量实现协调过程。要求写出使用的信号量、初值及其作用,并写出生产者进程和消费者进程的处理流程(10分)
某寺庙共有老和尚和小和尚若干人,庙外有一口井,只能容一人打水,庙内有6只水桶和一口缸,缸内最多能装30桶水,每只桶每次只能由一人使用,缸每次只能由一人使用。小和尚负责从庙外的井里打水,老和尚使用缸里的水,老和尚取水的单位是桶。请利用信号量和P、V操作描述老和尚和小和尚的活动。semaphore empty=30; // 表示缸中目前还能装多少桶水,初始时能装30桶水
semaphore full=0; // 表示缸中有多少桶水,初始时缸中没有水
semaphore buckets=6; // 表示有多少只空桶可用,初始时有6只桶可用
semaphore mutex_well=1; // 用于实现对井的互斥操作
semaphore mutex_bigjar=1; // 用于实现对缸的互斥操作
semaphore mutex_buchet=1; // 用于实现对桶的互斥操作,防止多人同时拿同一只桶yongermonk(){ while(1){P(empty);
P(buckets);
P(mutex_bucket);
get a bucket;
V(mutex_bucket);
go to the well;
P(mutex_well);
get water;
V(mutex_well);
go to the temple;
P(mutex_bigjar);
pure the water into the big jar;
V(mutex_bigjar);
V(buckets);
V(full);}}
oldmonk(){
while(1){P(full);
P(buckets);
P(mutex_bucket);
get a bucket;
V(mutex_bucket);
P(mutex_bigjar);
get water;
V(mutex_bigjar);
V(buckets);
V(empty);
}
}