Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 在这种情况下,int x的最小值和最大值是多少?_C_Multithreading - Fatal编程技术网

C 在这种情况下,int x的最小值和最大值是多少?

C 在这种情况下,int x的最小值和最大值是多少?,c,multithreading,C,Multithreading,我正在准备C语言并发编程的期中考试,我被这个问题困住了 假设您有以下循环: int x = 20; for (int i = -3; i <= 7; i++) x -= 2; } intx=20; 对于(int i=-3;i程序的行为未定义,因为有可能同时读取和写入x 对x的访问需要通过互斥进行控制,或者需要采取措施确保x-=2是原子的。只有这样,我们才能讨论x可以采用的可能值。由于可能同时读取和写入x,程序的行为未定义 对x的访问需要通过互斥进行控制,或者需要采取措施确保x-

我正在准备C语言并发编程的期中考试,我被这个问题困住了

假设您有以下循环:

int x = 20;

for (int i = -3; i <= 7; i++)
    x -= 2;
}
intx=20;

对于(int i=-3;i程序的行为未定义,因为有可能同时读取和写入
x


x
的访问需要通过互斥进行控制,或者需要采取措施确保
x-=2
是原子的。只有这样,我们才能讨论
x
可以采用的可能值。

由于可能同时读取和写入
x
,程序的行为未定义



x
的访问需要通过互斥进行控制,或者需要采取措施确保
x-=2
是原子的。只有这样,我们才能讨论
x
可以采用的可能值。

这对多处理器机器有什么影响?我假设变量
x
将是一个全局变量ble,循环将在每个线程中执行?如果是这样,那么您可能应该在问题中提到它,因为它与手头的问题非常相关。当然,请告诉我们您认为答案是什么,以及为什么。这个问题充其量是完全不明确的。首先,
x
是全局的吗?假设
x
是静态的一个全局变量或静态变量,很难说。例如,它是未定义的行为。在哪里说明读取或写入
int
值是原子的?如果访问变量不是原子的,那么最终的值可能是任何东西的混合体。@Someprogrammerdude编辑了这个问题以便澄清。我认为第一个线程将br将x的值降到0,但由于它们都同时工作,行为并不完全清楚。这就是为什么我在这里问这个问题以确保。这对多处理器机器有什么影响?我假设变量
x
将是一个全局变量,循环将在每个线程中执行?如果是这样的话如果是这样,那么你可能应该在问题中提到它,因为它与手头的问题非常相关。当然,告诉我们你认为答案是什么,以及为什么。这个问题充其量是完全不明确的。首先,
x
是全局的吗?静态的?假设
x
是全局变量或静态变量,就不可能知道了。它是未定义的例如,ned行为。在哪里说明读取或写入
int
值是原子的?如果访问变量不是原子的,那么最终的值可以是任何东西的混合体。@某个编程人员编辑了这个问题以澄清问题。我想第一个线程会将x的值降低到0,但因为它们都在模拟工作同时,行为并不完全清楚。这就是为什么我在这里问这个问题,以确保。在单处理器机器环境中,它是未定义的?标准没有提到这种情况,所以我认为仍然是。对不起,我不同意。如果我把上面的代码片段放在
main()中
,我相信它会有一个非常明确的结果。如果我错了,请告诉我。是的,如果你在
int main()
中插入上述内容,它当然会起作用。但它是“同时”的我不喜欢位。您将获得对
x
的非顺序访问。通过多个线程的同时访问,即使是
x=2
这样的简单分配也必须是原子的,以便排除真正不可预测的结果,而不仅仅是“错过了一些减量”这个问题似乎暗示会发生。在单处理器机器环境中,它是未定义的?标准没有提到这种情况,所以我认为仍然是。对不起,我不同意。如果我把上面的代码片段放在
main()中
,我相信它会有一个非常明确的结果。如果我错了,请告诉我。是的,如果你在
int main()
中插入上述内容,它当然会起作用。但它是“同时”的我不喜欢位。您将获得对
x
的非顺序访问。通过从多个线程同时访问,即使是
x=2
这样的简单赋值也必须是原子的,以便排除真正不可预测的结果,而不仅仅是“错过了一些问题似乎暗示会发生的递减”。