Ermöglicht das C ++ 11-Speichermodell das Entnehmen entspannter atomarer Lasten aus Schleifen?

8

Betrachten Sie den folgenden Code:

%Vor%

Ich suche nach einem Zitat aus dem C ++ 11-Standard, der besagt, dass der Compiler die Schleife nicht in

transformieren darf %Vor%

Ich habe einige Diskussionen hier gesehen, aber nichts Schlüssiges.

Bearbeiten : Eine frühere Version dieses Posts hat eine externe Funktion innerhalb der Schleife aufgerufen.

Edit 2 : Für Motivation: Das Buch "Effective Java" besagt, dass die HotSpot VM die folgende Umwandlung durchführt:

%Vor%

bis

%Vor%

obwohl das Verhalten für einen anderen Thread perfekt definiert ist, um die done Variable gleichzeitig zu ändern.

    
MuhKarma 26.10.2016, 21:53
quelle

1 Antwort

1

Vergessen Sie entspannt, es gibt keine Garantie, dass ein Atomspeicher überhaupt für eine atomare Ladung in einem anderen Thread sichtbar wird. Das Beste, was man bekommt, ist die normative Ermutigung in [atomics.order] / 12 (und analoger Formulierung) in [intro.progress] / 18 ):

  

Implementierungen sollten Atomspeicher für atomare Lasten sichtbar machen   innerhalb einer angemessenen Zeit.

... was keine Voraussetzung ist.

(C11 hat identische Formulierung in §7.11.3 / 16)

    
T.C. 26.10.2016 22:27
quelle

Tags und Links