一、测量控制系统中的数据采集任务把所采集的数据送一单缓冲区;计算任务则 从该缓冲区中取出数据并进行计算。试写出利用信号量机制实现二者共享单缓冲区的同步算法。 php
Var Sempty,Sfull: semaphore:= 1,0 算法
Begin 并发
Parbegin app
Collection:begin 进程
repeat ip
采集一个数据; 同步
wait(Sempty); it
数据放入缓冲区; io
signal(Sfull); map
untill false;
end;
Compute:begin
repeat
wait(Sfull);
从缓冲区取出数据;
signal(Sempty);
计算;
` until false;
end;
Parend
End
二、有一阅览室,共有100个座位。读者进入时必须先在一种登记表上登记,该表为每一座位列一个表目,包括座号和读者姓名。读者离开时要注销掉登记内容。试用wait和signal原语描述读者进程的同步问题。
var mutex, readcount :semaphore := 1,100;
Begin
Parbegin
Process Reader:begin
repeat
wait(readcount);
wait(mutex);
<填入座号和姓名完成登记>;
signal(mutex);
<阅读>
wait(mutex)
<删除登记表中的相关表项,完成注销>
signal(mutex);
signal(readcount);
until false;
end;
parend;
End;
1)、桌上有一空盘,只容许放一个水果,爸爸专向盘中放苹果,妈妈专向盘中放桔子;女儿专吃盘中的苹果,儿子专吃盘中的桔子;试用wait和signal原语实现爸爸、妈妈、女儿、儿子之间的同步问题。
var Sempty, Sapple, Sorange,: semaphore:= 1,0,0;
begin
parbegin
Father: begin
repeat
wait(Sempty); <put apple in tray>;
signal(Sapple); until false;
end;
Mother: begin
repeat
wait(Sempty); <put orange in tray>;
signal(Sorange); until false;
end;
Son: begin
repeat
wait(Sorange);
<take orange>;
signal(Sempty);
until false;
end;
Daughter: begin
repeat
wait(Sapple);
<take apple>;
signal(Sempty); until false;
end;
parend;
end;
一、在4×100米接力赛中,4个运动员之间存在以下关系,运动员1跑到终点把接力棒交给运动员2;运动员2一开始处于等待状态,在接到运动员1传来的接力棒后才能往前跑,他跑完100米后交给运动员3,运动员3也只有在接到运动员2传来的棒后才能跑,他跑完100米后交给运动员4,运动员4接到棒后跑彻底程。请试用信号量机制对其上过程进行分析。
var s1,s2,s3:semaphpre:=0,0,0;
begin
parbegin
Athlete1: begin
Run100m;
signal(s1);
end;
Athlete2: begin
wait(s1);
Run100m;
signal(s2);
end;
Athlete3: begin
wait(s2);
Run100m;
signal(s3);
end;
Athlete4: begin
wait(s3);
Run100m;
end;
parend;
end
二、在公共汽车上,司机和售票员各行其职,司机负责开车和到站停车;售票员负责售票和开、关车门;当售票员关好车门后驾驶员才能开车行驶。试用wait和signal操做实现司机和售票员的同步。
var s1,s2:semaphore:=0,0;
begin
parbegin
Process Driver
begin
repeat
<go right>;
<stop bus>;
signal(s2);
wait(s1);
until false;
end;
Process BookingClerk;
begin
repeat
<ticketing>;
wait(s2);
<open the door>;
<close the door>;
signal(s1);
until false
end;
parend;
end;
一、假设有3个并发进程P,Q,R,其中P负责从输入设备上读入信息,并传送给Q,Q将信息加工后传送给R,R负责打印输出。进程P,Q共享一个有m个缓冲区组成的缓冲池;进程Q,R共享一个有n个缓冲区组成的缓冲池(假设缓冲池足够大,进程间每次传输信息的单位均小于等于缓冲区长度),请写出知足上述条件的并发程序。(12分)
var mutex1,mutex2,Sip,Siq,Soq,Sor:semaphore:=1,1,m,0,n,0;
begin
parbegin
Process P
begin
repeat
<读入信息>
wait(Sip);
wait(mutex1);
<数据放入缓冲区>
signal(mutex1);
signal(Siq);
until false
end;
Process Q
begin
repeat
wait(Siq);
wait(mutex1);
<从缓冲区中取出数据>
signal(mutex1);
signal(Sip);
<数据处理〉
wait(Soq);
wait(mutex2);
<处理后的数据放入缓冲区>
signal(mutex2);
signal(Sor);
until false
end;
Process R
repeat
wait(Sor);
wait(mutex2);
<把数据送入打印机完成打印>;
signal(mutex2);
signal(Soq);
until false
end
parend
end
二、有一只铁笼子,每次只能放入一只动物,猎手向笼子里放入老虎,农民向笼子里放入猪;动物园等待取笼子里的老虎,饭店等待取笼子里的猪。现请用wait和signal操做写出能同步执行的程序。
var Sempty, Stiger, Spig,: semaphore:= 1,0,0;
begin
parbegin
Hunter: begin
repeat
wait(Sempty);
<put tiger in cage>;
signal(Stiger);
until false;
end;
Farmer: begin
repeat
wait(Sempty);
<put pig in cage>;
signal(Spig);
until false;
end;
Zoo: begin
repeat
wait(Stiger);
<take tiger>;
signal(Sempty);
until false;
end;
Hotel: begin
repeat
wait(Spig);
<take pig>;
signal(Sempty); until false;
end;
parend;
end;