gpt4 book ai didi

c++ - 为什么 “memory_order_relaxed”在我的系统中被视为 “memory_order_seq_cst” [C++]

转载 作者:行者123 更新时间:2023-12-02 10:11:26 26 4
gpt4 key购买 nike

我的代码:

std::atomic<int> x(22) , y(22);
int temp_x = -1, temp_y = -1;

void task_0(){
x.store(33, std::memory_order_relaxed);
temp_y = y.load(std::memory_order_relaxed);
}

void task_1(){
y.store(33, std::memory_order_relaxed);
temp_x = x.load(std::memory_order_relaxed);
}

int main(){
std::thread t1(task_0);
std::thread t2(task_1);

t1.join();
t2.join();

std::cout<<temp_x<<" : "<<temp_y<<"\n";

return 0;
}
问题是,因为我使用“memory_order_relaxed”,所以在测试了100次输出后,
应该是“22:22”,但是我的程序给出:
输出:
  "33 : 33"
"22 : 33"
"33 : 22"
但它没有给出“22:22”输出
我在64位2.9 GHz四核Intel Core i7架构中测试了该程序。伙计们,我的程序出了什么问题,我需要了解什么吗?

最佳答案

仅仅因为该标准说某种特殊的可能性是可能的,并不意味着导致其发生的原因是由随机数控制的。在实际计算机上,未指定行为的结果由这些实际计算机上操作码,高速缓存等的执行控制。
因此,尽管理论上有可能取得结果,但这并不意味着一定会发生。在您的特定情况下,要从这两者中获得22,则编译器(或CPU)基本上必须重新排序这两个函数中的至少一个。如果从这种重新排序中没有任何收获,那么它可能不会发生。

关于c++ - 为什么 “memory_order_relaxed”在我的系统中被视为 “memory_order_seq_cst” [C++],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63388494/

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