首页 > 试题广场 >

试写出正确实现GET、PRO、PUT的同步与互斥的算法

[问答题]
如图2所示,系统中有三个进程GETPROPUT,共用两个缓冲区BUF1BUF2。假设BUF1中最多可放11个信息,现已放入了两个信息;BUF2最多可放5个信息。GET进程负责不断地将输入信息送入BUF1中,PRO进程负责从BUF1中取出信息进行处理,并将处理结果送到BUF2中,PUT进程负责从BUF2中读取结果并输出。试写出正确实现GETPROPUT的同步与互斥的算法(要求:(1)用类C语言描述,条理清楚,注释恰当;(2)信号量原语统一使用waitsignal。)


semaphore

empty1=9;// buf1 的数目

full1=2;  // 有数据的 buf1 的数目

empty2=5; // buf2 的数目

full1=0;  // 有数据的 buf2 的数目

mutex1=mutex2=1; // 互斥信号量

int main(){

Cobegin  // 并发开始

GET();

PRO();

PUT();

Coend   // 并发结束

return 0;   }

//GET 进程

void GET () {

while(1)

{

wait(empty1);

wait(mutex1);

将信息送入 buf1;

signal(mutex1);

signal(full1);

}

}

//PRO 进程

void PRO () {

while(1)

{

wait(full1);

wait(mutex1);

buf1 中取出信息 ;

signal(mutex1);

signal (empty1);

wait(empty2);

wait(mutex2);

将信息送入 buf2;

signal(mutex2);

signal(full2);

}

}

//PUT 进程

void PUT () {

while(1)

{

wait(full2);

wait(mutex2);

buf2 中取出信息 ;

signal(mutex2);

signal (empty2);

}


发表于 2017-04-30 15:41:57 回复(1)