同时递增和递减共享变量

时间:2013-10-07 18:37:41

标签: deadlock

如果x在任何这种情况发生之前被初始化为0,那么在两个不同的进程中同时执行以下两个for循环之后x的可能值是多少? (每个过程一个)

for (i = 0; i < 5; i++)
    x++

for (j = 0; j < 5; j++)
    x--

(已编辑)这里会发生什么?任何指令都可以失败,或者结果总是x = 0?

1 个答案:

答案 0 :(得分:1)

没有理由因为没有锁定代码而导致死锁。 i和j的不同值取决于线程执行的非确定性顺序。 假设第一个线程开始,然后在时间i = 4时停止,然后第二个线程开始,将i初始化为零并继续直到第一个和第二个循环结束。第二个线程从第一个循环中恢复并立即退出,因为i = 6(前一个线程留下的值),然后在第二个循环中正常进行。 这只是一个场景。你可以提出类似的,可能性是无穷无尽的。