没有睡觉的达人过帮忙看一下,在线等等!
有两个进程P1和P2共享变量count,当进程P1,P2按下述顺序执行时一次为(R1和R2是处理机中寄存器):
P1: R1=count;
R1=R1+1;
count=R1;
P2: R2=count;
R2=R2+1;
count=R2;
其结果使count增加了2,正确;但当P1和P2按另一种顺序对变量count修改,即交叉执行一次,例如:
P1: R1=count;
P2: R2=count;
P1: R1=R1+1;
count=R1;
P2: R2=R2+1;
count=R2;
虽然P1和P2都各自对count做了一次加1操作,但count最后的结果仅增加了1,因为P1加1操作无效,发生了与执行顺序有关的错误。为了预防这种错误的发生,对变量count也应按临界资源处理,即采取措施强迫P1和P2顺序访问count,即互斥访问count。
在上面的互斥的例子中,第一个我懂,可是第二个中说到:
但count最后的结果仅增加了1,因为P1加1操作无效,发生了与执行顺序有关的错误
这句话该怎么理解?为什么P1加1无效?从哪里看出发生了与执行顺序有关的错误?
if count=6 那么按照:
P1: R1=count;
P2: R2=count;
P1: R1=R1+1;
count=R1;
P2: R2=R2+1;
count=R2;
有:
P1: R1=count=6;
P2: R2=count=6;
P1: R1=R1+1=7;
count=R1=7;
P2: R2=R2+1=7+1=8;
count=R2=8;
结果还是加了2啊!
请达人解惑,;谢!
另,本来想发到os版,可是这里人较多,就发这了,请版竹谅解.