Für was ist ein flüchtiger Kopierkonstruktor?

8

Können Sie ein triviales oder reales Beispiel geben, um die Verwendung des volatilen Copy-Konstruktors zu demonstrieren?

Ich konnte einfach nicht mit einem kommen.

    
Jichao 09.10.2013, 05:48
quelle

1 Antwort

8

wie @Nawaz bereits darauf hingewiesen hat:

  

Wenn Sie flüchtige Objekte haben, benötigen Sie volatile copy-ctor. Also läuft die Frage darauf hinaus: Wann brauchen Sie flüchtige Objekte?

Der Hauptgrund für die Verwendung eines volatilen Schlüsselworts besteht normalerweise darin, die Optimierung zu deaktivieren. Das heißt, wenn Sie so etwas haben:

%Vor%

Der Compiler sieht, dass das Flag nicht geändert werden kann, so dass es nicht nötig ist, das Flag jedes Mal zu überprüfen - so wird es nicht. Aber wenn Sie Variable Variable volatil machen - es wird.

Hier ist eine Meinung über den ursprünglichen Gebrauch des volatilen Keywords: link

Kurz gesagt, es wurde ursprünglich verwendet, um über MMIO auf Hardware zuzugreifen, was etwas ungewöhnlich sein kann:

%Vor%

Und Sie wollen nicht, dass diese 3 Zuweisungen aufgrund der Optimierung zu einem werden.

Und hier ist ein Artikel von Andrei Alexandrescu über volatile Multithread-Software: link

Es gab einige Zeitungen, die Alexandrescus Papier kritisierten, aber ich konnte es nicht finden. Der Punkt dort war, dass er flüchtiges Eigentum wegwarf und so weiter.

Achten Sie auf sehr wichtige Dinge beim Multithreading, auf die @JanHudec hingewiesen hat:

  

volatile ist für Multithread-Kontexte völlig nutzlos, da es zwar keine Optimierung verhindert, aber keine expliziten Barrieren erzeugt. Und ohne dass das Schreiben auf einer CPU für eine andere CPU sichtbar wird (architekturabhängig; x86 hat kohärente Caches, so dass dort immer Schreibvorgänge sichtbar sind).

     

Auch volatile erzwingt keine atomare Operation. Die Zuweisung von x86 ist immer atomar, aber nicht bei allen CPU-Architekturen. Und komplexere Operationen wie Inkrement können nur mit std::atomic atomar ausgeführt werden.

    
Stan McGeek 09.10.2013, 06:27
quelle

Tags und Links