问答题
下面是两个并发执行的进程。它们能正确执行吗?若不能,试举例说明,并修改之。 Cobegin Var x: integer; Process P1 Var y, z:integer; Begin x:=1; y"=0; If X>=1 then y:=y+1; z:=y; End Process P2 Var t, u:integer; Begin x:=0; t:=0; If x<1 then t:=t+2; u:=t; End Coend
【正确答案】P1和P2是两个并发进程,它们不能正确执行,可能导致结果的不确定性,如: 进程P1 进程P2 (1)x:=1 (a)x:=0 (2)y:=0 (b)t:=0 (3)if x>=1 then y:=y+1 (c)if x<1 then t:=t+2 (4)z:=y (d)u:=t 如果P1和P2按顺序执行,即(1)(4)(a)(d),则结果为: y=1,z=1,t=2,u=2 如果执行顺序是:(1)(2)(a)(b)(3)(4)(c)(d),则结果为: y=0,z=0,t=2,u=2 结果不确定性的原因在于使用了公共变量,要求P1和P2必须互斥执行,对程序修改如下: Cobegin Var x:integer; s:semaphore; s:=1 Process P1 Var y, z:integer; Begin p(s); x:=1; y:=0; if x>=1 then y:=y+1; v(s); z:=y; End Process P2 Var t, u:integer; Begin p(s); x:=0; t:=0; if x<1 then t:=t+2; v(s); u:=t; End Coend