gpt4 book ai didi

C:线程安全和操作顺序

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

考虑以下 C 代码:

static sig_atomic_t x;
static sig_atomic_t y;

int foo()
{
x = 1;
y = 2;
}

第一个问题:C 编译器能否决定将 foo 的代码“优化”为 y = 2; x = 1(在某种意义上,y 的内存位置在 x 的内存位置之前更改)?这将是等效的,除非涉及多个线程或信号。

如果第一个问题的答案是"is":如果我确实想要保证x存储在y之前,我该怎么办?

最佳答案

是的,编译器可能会更改两个赋值的顺序,因为重新排序不是“可观察到的”如 C 标准所定义的,例如,赋值没有副作用(再次强调,按照 C 标准的定义,该标准不考虑外部观察者的存在)。

实际上,您需要某种屏障/栅栏来保证顺序,例如,使用多线程环境提供的服务,或者可能使用 C11 stdatomic.h(如果可用)。

关于C:线程安全和操作顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53415018/

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