Sukzessive Optimierung - Volatile

Inhaltsverzeichnis[Anzeigen]

Was hat das Schlüsselwort volatile in C# und Java mit dem Schlüsselwort volatile in C++ gemein? Nichts!

volatile

Eigentlich ist alles so einfach in C++.

  1. volatile ist für speziellen Speicher konzipiert, auf dem lese- und schreibe-Operartionen nicht optimiert werden dürfen.
  2. std::atomic definiert atomare Variablen, die für den threadsicheren lesenden und schreibenden Zugriff konzipiert sind.

Eigentlich. Die Verwirrung beginnt aber genau hier. Das Schlüsselwort volatile in Java und C# besitzt die Bedeutung des Typs std::atomic in C++. Oder anders ausgedrückt. volatile besitzt keine Multithreading Semantik im C++-11-Standard.

volatile wird typischerweise in der embedded Programmierung eingesetzt um Speicherbereiche auszuzeichen, die unabhängig vom regulären Programmverlauf modifiziert werden können. Dies sind zum Beispiel Speicherbereiche, die ein externes Device (memory-mapped I/O) repräsentieren. Da diese Speicherbereiche sich unabhängig vom regulären Programmfluß verändern können, werden ihre Werte dank volatile direkt in den Hauptspeicher geschrieben. So findet kein optimiertes Speichern in den Zwischenspeichern (Caches) statt.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <thread>

volatile int x= 0;
volatile int y= 0;

void writing(){
  x= 2000;
  y= 11;
}

void reading(){ 
  std::cout << "y: " << y << " ";
  std::cout << "x: " << x << std::endl;
}

int main(){
  std::thread thread1(writing);
  std::thread thread2(reading);
  thread1.join();
  thread2.join();
};

 

Was bedeutet dies für unser kleines Programm aus Sukzessive Optimierung, wenn in diesem die int-Variablen zu volatile int-Variablen werden. Die Antwort ist ganz einfach. Das Programm enthält kritische Wettläufe der Variablen x und y. Damit ist der Programmverlauf undefiniert und somit keine Aussage über die Werte von x und y möglich.

undefined

 

Wie geht's weiter?

Mit diesem Artikel beende ich die Serie rund um Artikel zu Multithreading in Modernem C++. Zur besseren Orientierung verweise ich mit dem nächsten Artikel auf die Übersichtsseite aller Artikel.

 

 

 

 

 

 

 

title page smalltitle page small Go to Leanpub/cpplibrary "What every professional C++ programmer should know about the C++ standard library".   Hole dir dein E-Book. Unterstütze meinen Blog.

 

 

 

Kommentar schreiben


Abonniere den Newsletter (+ pdf Päckchen)

Beiträge-Archiv

Sourcecode

Neuste Kommentare