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.

 

 

 

Mentoring

Stay Informed about my Mentoring

 

Rezensionen

Tutorial

Besucher

Heute 159

Gestern 1401

Woche 3688

Monat 8768

Insgesamt 2363046

Aktuell sind 39 Gäste und keine Mitglieder online

Kubik-Rubik Joomla! Extensions

Abonniere den Newsletter (+ pdf Päckchen)

Beiträge-Archiv

Sourcecode

Neuste Kommentare