gpt4 book ai didi

c - 给定两个线程并行运行时,变量的可能值是多少?

转载 作者:行者123 更新时间:2023-12-03 12:44:30 25 4
gpt4 key购买 nike

问题来自Stanford.的试卷,其描述如下:

假设两个线程同时执行以下C代码,并访问共享变量a,b,
和c:

初始化

int a = 4;
int b = 0;
int c = 0;

线程1:
if (a < 0) { 
c = b - a;
} else {
c = b + a;
}

线程2:
b = 10;
a = -3

两个线程完成后, c的可能值是什么?您可以假设读取和
变量的写入是原子的,并且每个线程内的语句顺序保留在C编译器生成的代码中。

回答:4,7,14,13,-3

我对前四个输出的理解如下,但是鉴于线程内语句的顺序得以保留,我无法理解输出-3会如何发生。

4:完全执行线程1,然后执行线程2。
7:在 c = b + a之前中断线程1,然后执行线程2,然后再次执行线程1。
14:执行线程2,直到 b = 10完成,然后中断它,并完全执行线程1。
13:完全执行线程2,然后执行线程1。

现在,我停留在如何获取-3作为 c的最终值的问题上? -3仅在 b=0a=-3以及线程1从 c = b + a开始执行时才可能。在其他任何情况下,我都看不到-3。但是正如所提到的,语句的顺序得以保持,因此a的值不能为-3,除非我们将b的值更改为10。

有人可以解释在这种情况下如何输出-3吗?

最佳答案

您可以按以下方式获取-3:

  • 在线程1中,检查a < 0,这是错误的。这会将您带到else条件。读取b的值,即0
  • 切换到线程2,完全执行它。 a现在是-3
  • 切换回线程1,读取a,即-3。然后,添加-3并将其分配给c
  • 关于c - 给定两个线程并行运行时,变量的可能值是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60422839/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com