gpt4 book ai didi

c - 不可观察的原子是否同步内存?

转载 作者:太空狗 更新时间:2023-10-29 16:56:42 25 4
gpt4 key购买 nike

总的来说,C11原子不仅保证了对原子对象本身的操作的原子性,还为访问其他(非原子)对象提供了内存同步。但是,我不清楚这种同步本身是否是一个可以观察到的副作用,在严格符合程序中,独立于原子对象,或者它是否仅在执行同步的原子对象被所有人访问时才有意义需要进行同步的线程。

特别是,给定一个函数,例如:

void foo()
{
_Atomic int x = 0;
x++;
}

编译器是否需要为此函数生成任何代码?或者,由于 x 的生命周期立即结束,没有机会参与与其他线程的同步,编译器可以优化整个函数吗?

最佳答案

首先我们有6.2.6.1 p9

Loads and stores of objects with atomic types are done with memory_order_seq_cst semantics.

对于原子对象的其他操作也是如此。

因此,所讨论的商店具有 memory_order_seq_cst 语义。对于这些,然后在 7.17.3 中说明它们出现在所有此类操作的总顺序 S 中。与 S 中的事件具有某种顺序关系的对象的所有其他修改都受该顺序的约束。

原子对象本身和操作可以被优化掉,因为值是不可观察的。但 foo() 的效果是一个 memory_order_seq_cst 栅栏,不应优化掉该栅栏。

关于c - 不可观察的原子是否同步内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24762408/

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