其他分享
首页 > 其他分享> > C的宽松记忆模型中是否存在具有依赖循环的非因果行为?

C的宽松记忆模型中是否存在具有依赖循环的非因果行为?

作者:互联网

假设x和y是用0初始化的原子整数.

现在,线程A运行以下代码:

if (x.load(memory_order_relaxed) == 1) {
    y.store(1, memory_order_relaxed);
}

和线程B运行此代码:

if (y.load(memory_order_relaxed) == 1) {
    x.store(1, memory_order_relaxed);
}

在C中,是否有可能达到(x == 1和y == 1)的情况?如果有可能,为什么?

我在https://people.mpi-sws.org/~viktor/slides/2014-07-ec2.pdf(依赖循环部分)中看到了这个声明.

解决方法:

好问题!

这些被称为“凭空”价值,因为价值1没有来源.这些在C 11中被忽略,由纸张N3710指出并在C 14中被禁止.

正如N3710所说,

No known implementations actually produce such results.

标签:memory-model,c,multithreading
来源: https://codeday.me/bug/20190828/1753084.html