提问人:xmh0511 提问时间:11/13/2023 最后编辑:xmh0511 更新时间:11/14/2023 访问量:115
原子对象的值计算结果是否未指定?[复制]
Is the result of the value computation of an atomic object unspecified? [duplicate]
问:
[intro.races] p14说:
由评估 B 确定的原子对象 M 的值应为修改 M 的某个副作用 A 存储的值,其中 B 不会在 A 之前发生。
“一些副作用 A”可能是指修改顺序中的随机值,本 https://github.com/cplusplus/draft/pull/6501 证实了这一点。因此,请考虑以下示例:
std::atomic<int> v{0};
auto c = [](){v.store(1,std::memory_order::release); return 1;}();
auto c2 = [](){v.store(2,std::memory_order::release); return 2;}();
int main(){
auto r = v.load(std::memory_order::acquire); // #1
}
首先,我们可以确定在这些修改之前不会发生这种情况。那么,在 的值计算结果是什么?是修改顺序中的最新值,还是可以是 、 或 ,其中任何一个是可能的,这是未指定的?在这个例子中,实现总是说结果是,即使结果也遵守规则,但是,我想知道这个结果是否是确定的?或者,它只是一种未指定的行为。#1
#1
0
1
2
2
答: 暂无答案
评论
#1
0
main
atomic
1
2
0
v
c
c2
main()