有一对夫妻在某银行申请了一个共同的帐号,办理了正副两张银行卡。每张银行卡都可独立存款和取款,规定每次存款或取款的金额为1000元(约定可透支)。自动存取款机
中为银行卡设置了如下两个进程:
begin
amount:integer;
amount:=0;
cobegin
processSAVE
k:integer;
begin
k:=amount;
k:=k+1000;
amount:=k
end;
processTAKE
t:integer;
begin
t:=amount;
t:=t-1000;
amount:=t
end;
coend;
end;
回答下列问题:
(1)上述进程执行时会产生怎样的错误?为什么?
(2)为保证系统的安全,可采用PV操作来管理。请完善上述程序,以确保系统的安全。
(1)会产生与时间有关的错误。
因正副卡都可独立存取款,且存取款是随机的,故两进程就可能并发执行。
由于它们都涉及到共享变量amount,当交替访问amount时就会出错。
(2)完善后的程序如下。方框处为应完善的内容。