Werden die beiden Lasten in solchen Szenarien zu einer zusammengefasst? Wenn dies architekturabhängig ist, was wäre dann bei modernen Prozessoren von beispielsweise Intel der Fall? Ich glaube, Atomlasten entsprechen normalen Lasten in Intel-Prozessoren.
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()
und run2()
sind einfach zwei Szenarien, die zwei Lasten derselben atomaren Variablen verwenden. Kann der Compiler solche Szenarien von zwei Ladevorgängen in einen Ladevorgang zusammenfassen und diesen wiederverwenden?
Entschuldigung, warum hast du beides
run1
undrun2
? Können Sie Ihre Frage konkretisieren?– Brian Bi
24. Januar ’17 um 5:23
@Brian Einfach zwei Szenarien. Bearbeitet.
– themagicalyang
24. Januar ’17 um 5:33