1.两个进程PA 和PB通过两个FIFO缓冲区队列连接(如下图所示),每个缓冲区长度等于传送消息长度。进程PA和PB之间的通信满足如下条件:
(a)至少有一个空缓冲区存在时,相应的发送进程才能发送一个消息。
(b)当缓冲队列中至少存在一个 非空缓冲区时,相应的接收进程才能接收一个消息。
试描述发送过程send(i,m)和接收过程receive(i,m)。这里i代表缓冲队列。
由题意可知,进程PA与PB之间进行通信时,过程send(i,m)和过程receive(i,m)必须同步执行,因为过程send(i,m)的执行结果是过程receive(i,m)的执行条件,而当缓冲队列全部装满数据时,receive(i,m)的执行结果又是send(i,m)的执行条件,满足同步定义。
由于进程PA和PB通过俩个FIFO缓冲区队列连接,设Bufempty[0],Bufempty[1]为进程PA的私用信号量,Buffull[0]、Buffull[1]为进程PB的私用信号量。Bufempty[0],Bufempty[1]的初始值为n(n为缓冲队列的缓冲区个数),Buffull[0]、Buffull[1]的初始值为0。
send(i,m):
begin local x
P(Bufempty[i])
按FIFO方式选择一个空缓冲区Buf[i](x)
Buf[i](x) <- m
Buf[i](x)置满标记位
V(Buffull[i])
end
receive(i,m):
begin local x
P(Buffull[i])
按FIFO方式选择一个装满数据的缓冲区Buf[i](x)