请用PV操作解决读者和写者问题

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

}

}

相关文档
最新文档