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