问题是:
全局变量x的初始值为0。在系统中,有两个并发进程,代码如下:
process P;
var i: integer;
begin
for i := 1 to 5 do x := x+ 1;
end;在执行两个进程之后,x的值为..。
A. =10
B. >=5
C. <10
可能有一个以上的答案正确。所以我认为是A和B,但是有人能解释一下这个过程是如何在幕后执行的吗?
发布于 2015-06-25 08:50:17
当两个进程处理相同的数据时,主要是当一个进程读取一个变量并写入一个值时。
如果两个进程第一次同时读取x,它们都会看到x的值为0。当第一个进程写入x的新值时,它将是1,而当第二个进程写入x的值时,它也将是1。如果两个进程不同步,则第一个进程可能读取x的值并写入它,然后第二个进程将读取和写入x。在后一种情况下,x将增加2而不是1。
所以答案B总是正确的,因为即使这两个进程同时读取x,它也会增加5倍。
只有当两个进程一个接一个地读写x时,答案A才是正确的。答案C在所有其他情况下都是正确的。
https://stackoverflow.com/questions/31045300
复制相似问题