【发布时间】:2017-06-08 19:12:37
【问题描述】:
在这种情况下,两种负载是否会合二为一? 如果这取决于架构,那么说英特尔的现代处理器会是什么情况?我相信原子负载相当于英特尔处理器中的正常负载。
void run1() {
auto a = atomic_var.load(std::memory_order_relaxed);
auto b = atomic_var.load(std::memory_order_relaxed);
// Some code using a and b;
}
void run2() {
if (atomic_var.load(std::memory_order_relaxed) == 2 && /*some conditions*/ ...) {
if (atomic_var.load(std::memory_order_relaxed) * somevar > 3) {
/*...*/
}
}
}
run1() 和run2() 只是使用两个加载相同原子变量的两个场景。编译器能否将这种两次加载的场景折叠成一次加载并重用它?
【问题讨论】:
-
抱歉,为什么你同时拥有
run1和run2?您能否更具体地回答您的问题? -
@Brian 简单的两种情况。已编辑。
标签: c++ gcc x86 atomic compiler-optimization