问题是:
全局变量x的初始值为0.在系统中,有两个并发进程正在进行,代码如下:
process P;
var i: integer;
begin
for i := 1 to 5 do x := x+ 1;
end;
执行两个进程后x的值为......
一个。 = 10
B中。 > = 5
℃。 < 10
可以有多个答案正确。 所以我认为这是A和B,但有人可以解释一下这个过程是如何在幕后执行的吗?
答案 0 :(得分:1)
当两个进程处理相同的数据时,它是关于一个进程何时读取变量以及何时写入值。
如果两个进程第一次同时读取 x ,则它们都会将 x 的值视为0.当第一个进程写入新进程时 x 的值为1,但当第二个进程写入 x 的值时,它也将为1.如果两个进程不同步,则可能是第一个进程读取 x 的值并写入,然后第二个进程将读取 x 并写入 x 。在后一种情况下, x 将增加2而不是1。
因此答案B将永远为真,因为即使两个进程同时读取 x ,它也会增加5次。
答案A只有当两个进程一个接一个地读写 x 时才会成立。 在所有其他情况下,答案C都是正确的。