西安交大操作系统第一次习题课
习题课(一);Contact me;Brief;Assignment: 6.4;Assignment: 6.9;Assignment: 6.11;var mutex,customers, barbers : semaphore;
waiting, chairs : integer;
procedure barber:
begin
while(true)
begin
p(customers);
p(mutex);
waiting:= waiting – 1 ;
v(mutex);
cuthair();
v(barbers);
end
end;procedure customer;
begin
p(mutex);
if (waiting chairs) then
begin
waiting:= waiting + 1 ;
v(customers);
v(mutex);
p(barbers);
get-haircut()
end
else
begin
v(mutex);
end
end;begin
seminitial (mutex,1 ; barbers, 0; customers,0);
waiting=0;
chairs=10;
cobegin
barber;
customer;
…..
customer;
coend
end;Assignment: Extra problem 1;解法二:另外设置一个信号量w=1;用于写进程到达后封锁后续读进程
READER :
P(w);
P(mutex);
Rc:=rc + 1;
If rc = 1 then P(wr); -----若是第一个读进程,则要看有无写进程
V(mutex);
V(w);
READING
P(mutex);
Rc := rc -1;
If rc = 0 then V(wr); -------若所有读进程都执行完,可以让其它进程读写
V(mutex)
WRITER :
P(w);
P(wr);
WRITING;
V(wr)
V(w);;producer:
v(product);
p(mutex);
v(mutex);
consumer:
p(mutex);
p(product);
//remove product
v(mutex);;Assignment: 5.1;Assignment: 5.4;1.有一阅览室,共有100个座位。读者进入时必须先在一张登记表上登记,该表为每一座位列一表目,包括座号和读者姓名。读者离开时要消掉登记内容。试用P/v操作描述读者进程的同步结构。
解析:定义信号量以及相应变量
mutex: semaphore; 互斥信号量
full: semaphore; 同步信号量
table: array 0.. n-1 of item ;
;Procedure reader;
begin
P(full) ;
P(mutex);
Register-name ( table) ;
原创力文档

文档评论(0)