在这种情况下,这两个负载将合并为一个吗?如果这取决于架构,那么在比如来自英特尔的现代处理器中会是什么情况呢?我相信原子负载在英特尔处理器中等同于普通负载。
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 Bi