并发测试任务

时间:2015-06-25 08:41:17

标签: concurrency

问题是:

全局变量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,但有人可以解释一下这个过程是如何在幕后执行的吗?

1 个答案:

答案 0 :(得分:1)

当两个进程处理相同的数据时,它是关于一个进程何时读取变量以及何时写入值。

如果两个进程第一次同时读取 x ,则它们都会将 x 的值视为0.当第一个进程写入新进程时 x 的值为1,但当第二个进程写入 x 的值时,它也将为1.如果两个进程不同步,则可能是第一个进程读取 x 的值并写入,然后第二个进程将读取 x 并写入 x 。在后一种情况下, x 将增加2而不是1。

因此答案B将永远为真,因为即使两个进程同时读取 x ,它也会增加5次。

答案A只有当两个进程一个接一个地读写 x 时才会成立。 在所有其他情况下,答案C都是正确的。