C++-Programmierung/ Im Zusammenhang mit Klassen/ volatile

Aus Wikibooks


Mit dem Schlüsselwort volatile vor einem Variablentyp (bei der Deklaration einer Variablen) wird der Compiler angewiesen, die Variable bei jedem Zugriff erneut aus dem Speicher zu laden bzw. bei schreibendem Zugriff die Variable sofort in den Speicher zu schreiben. Ohne volatile würde die Optimierung des Compilers möglicherweise dazu führen, dass die Variable in einem Prozessorregister zwischengespeichert wird.

volatile wird dann verwendet, wenn zu erwarten ist, dass auf den Wert der Variablen von außerhalb des Programmablaufs zugegriffen wird. Solch ein Zugriff könnte beispielsweise durch die Hardware stattfinden. Ein typischer Anwendungsfall ist ein Interrupt (also eine Unterbrechung des aktuellen Programms zur Behandlung auftretender Ereignisse), bei dem eine Hardware-Komponente einen neuen Wert in die Variable schreibt oder den aktuellen Wert ausliest. Eine Zwischenspeicherung der Variablen anderswo würde dazu führen, dass das Programm (oder die Hardware) nicht mit dem geänderten Wert arbeitet und diesen möglicherweise sogar überschreibt.

Aber: volatile garantiert weder eine atomare Ausführung/Zugriff, noch Thread-sicheren Zugriff, und ist daher nicht für multi-threaded -Anwendungen zur Synchronisierung einsetzbar.