Procedure Sender i(i:integer); Procedure Recvr(i: integer) {i为发送进程的标号} i为接收进程的标号} Var s0,j: integer; Var integer: begin begin Repeat j:=0; P(mutex); Repeat :=S P(buff[. fuli; S:(s+1)mod k; 从 buff[jl. msg中读信息 v(mutex) P(buff[il mutex); P(buffs].empty) buff[jl. count:=buff[il. count-1; 在buf90msg中写信息; If (buff[jl. count=0) P(buffs. mutex)i ThenⅤ( buff[jl. empty) buffs]. count: =n; V(buff[j mutex); V(buffs. mutex); j: =(j+1)mod k For gj: =l to n do) Until false v(buff(]. fuld End Until false: End
Procedure Sender_i(i:integer); { i 为发送进程的标号} Var s0, j: integer; Begin Repeat P(mutex); s0:=s; s:=(s+1) mod k; V(mutex); P(buff[s0].empty); 在buff[s0].msg中写信息; P(buff[s0].mutex); buff[s0].count:=n; V(buff[s0].mutex); For (j:=1 to n do) V(buff[s0].full[j]); Until false; End Procedure Recvr(i:integer); { i 为接收进程的标号} Var j: integer; Begin j:=0; Repeat P(buff[j].full[i]); 从buff[j].msg中读信息; P(buff[j].mutex); buff[j].count:= buff[j].count-1; If (buff[j].count=0) Then V(buff[j].empty); V(buff[j].mutex); j:=(j+1) mod k Until false; End
PALS6读者写者的问题 第二类读者写者问题(写者优先) 1)共享读 2)互斥写、读写互斥 3)写者优先于读者(一旦有写者,则后 续读者必须等待,唤醒时优先考虑写者)
6.读者写者的问题 第二类读者写者问题(写者优先) 1)共享读 2)互斥写、读写互斥 3)写者优先于读者(一旦有写者,则后 续读者必须等待,唤醒时优先考虑写者)