gpt4 book ai didi

c++ - 编译时内存重新排序会导致死锁吗?

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:43 25 4
gpt4 key购买 nike

<分区>

一边看this讲到C++11原子在LLVM中的实现有这段代码

-- Initially --
int x = 0;
std::atomic<bool> flag1{false}, flag2{false};


-- Thread 1 --
x = 42;
flag1.store(true, std::memory_order_release);

while(!flag2.load(std::memory_order_acquire));
x = 43;


-- Thread 2 --
while(!flag1.load(std::memory_order_acquire));
printf("%d", x);
flag2.store(true, std::memory_order_release);

我认为这段代码没有数据争用(正如演讲者所说):除了 42 之外,它永远不会打印任何内容。

但是,我不确定它是否会打印42。我的问题是:难道不允许编译器通过线程 1 中的 while 循环对存储重新排序,以便两个线程都死锁吗?或者 C++11 标准的哪一部分阻止了这种行为?

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