设有如下两个进程PA和PB,PA进程把n值加1,PB进程打印n值,n的初值为0,现PA和
PB两进程开发执行,要求打印出1,2,3......的连续数.
val:s1.s2:semapior;
s1=1,s2=0
PA:begin PB:begin
repeat repeat
p(s1) p(s2)
n=n+1 write(n)
v(s1) v(s2)
until false until false
end end问:1.上列用P,V操作表示的同步操作算法有何错误?
2.用P,V操作写出正确的同步算法.
PB两进程开发执行,要求打印出1,2,3......的连续数.
val:s1.s2:semapior;
s1=1,s2=0
PA:begin PB:begin
repeat repeat
p(s1) p(s2)
n=n+1 write(n)
v(s1) v(s2)
until false until false
end end问:1.上列用P,V操作表示的同步操作算法有何错误?
2.用P,V操作写出正确的同步算法.
mutex = 1; //用于互斥pa:
p(mutex);
n = n + 1
v(mutex);
v(sm)pb:
p(sm);
p(mutex)
write(n)
v(mutex)不知道这样对不对,呵呵
sm_read = 0; //能否读n
mutex = 1; //用于互斥pa:
p(sm_write);
p(mutex);
n = n + 1;
v(mutex);
v(sm_read);pb:
p(sm_read);
p(mutex);
write(n);
v(mutex);
v(sm_write);呵呵,现在可以精确同步了吧
s1=1;// 互斥
s2=0;// 同步
PA:begin PB:begin
repeat repeat
p(s1) p(s2)
n=n+1 p(s1)
v(s1) write(n)
v(s2) v(s1)
until false until false
end end
val:s1.s2:semapior;
s1=1,s2=0
PA:begin PB:begin
repeat repeat
p(s1) p(s2)
n=n+1 write(n)
v(s2) v(s1)
until false until false
end end