Verstößt eine Implementierung, die die Auswertung in einem einzelnen Thread neu anordnet, gegen [intro.execution] p8?C++

Programme in C++. Entwicklerforum
Anonymous
 Verstößt eine Implementierung, die die Auswertung in einem einzelnen Thread neu anordnet, gegen [intro.execution] p8?

Post by Anonymous »

[intro.execution] p8 sagt:

Wenn bei zwei beliebigen Auswertungen A und B A vor B sequenziert wird (oder äquivalent B nach A sequenziert wird), dann soll die Ausführung von A der Ausführung von B vorausgehen.

Betrachten Sie dieses Beispiel:

Code: Select all

#include 
#include 
int main(){
std::atomic v1;
std::atomic v2;
auto t1 = std::thread([&](){
v1.store(1,std::memory_order:relaxed);  // #1
v2.store(2,std::memory_order:relaxed);  // #2
});
t1.join();
}
Eine echte Implementierung kann eine StoreStore-Neuordnung durchführen, auch zur Kompilierungszeit, sodass #2 von t1 ausgeführt wird, #1 jedoch nicht. Verstößt diese Neuordnung gegen [intro.execution] p8? Gemäß [intro.execution] p8 können wir im abstrakten Maschinensinn, wenn #2 von t1 ausgeführt wird, daraus schließen, dass #1 bereits von Thread t1 ausgeführt wurde, da die Ausführung von #1 der Ausführung von #2 vorausgehen soll; Die StoreStore-Neuordnung macht die Aussage jedoch falsch.
Wie ist der Widerspruch hier zu interpretieren?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post