Am 14. September 2017 haben wir eine überarbeitete Fassung unserer Datenschutzrichtlinie veröffentlicht. Wenn Sie video2brain.com weiterhin nutzen, erklären Sie sich mit diesem überarbeiteten Dokument einverstanden. Bitte lesen Sie es deshalb sorgfältig durch.

C++: Speichermodell

Das C++-Speichermodell

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Erfahren Sie, warum das C++-Speichermodell die notwendige Grundlage für wohldefiniertes Multithreading in C++ ist.
04:33

Transkript

In dieser Lektion möchte ich Ihnen einen Überblick über das C++-Speichermodell geben. Das C++-Speichermodell ist die notwendige Grundlage für Multithreading. Was heißt das? Ohne das C++-Speichermodell wäre Multithreading in C++ nicht definiert. Da stellt sich natürlich die Frage, mit was beschäftigt sich das Speichermodell? Im Wesentlichen beschäftigt es sich mit drei Punkten. Mit atomaren Daten und Operationen, der teilweisen Ordnung von Operationen, den sichtbaren Effekten von Operationen. Was heißt das? Atomare Daten und Operationen sind, wie der Name schon sagt, Operationen, die atomar sind, also nicht trennbar. Bei der teilweisen Ordnung von Operationen geht es um den Punkt, wenn Operationen in einem Thread stattfinden, dann gibt es Garantien, dass die Operationen im anderen Thread in der gleichen Reihenfolge wahrgenommen werden. Und dann kommen wir noch zu den sichtbaren Effekten von Operationen, da geht es darum, dass, wenn Operationen A und B in einem Thread stattgefunden haben, muss das nicht unbedingt heißen, dass die Operationen A und B in einem anderen Thread in der gleichen Reihenfolge wahrgenommen werden. Dazu braucht man Speichermodell, damit das wohldefiniert ist. Auf diesem Speichermodell basiert die standardisierte Threading-Schnittstelle in C++, natürlich auch in jeder anderen Programmiersprache. Diese standardisierte Threading-Schnittstelle besteht aus Threads und Tasks, Tasks kennen Sie auch unter dem Namen Promise und Future, weiter gehts in der standardisierten Threading-Schnittstelle um den Schutz und das sichere Initialisieren der Daten, es geht um Thread-lokale Daten, und es geht um die Synchronisation des Threads. Synchronisation des Threads, das sind im Wesentlichen Bedingungsvariablen. Aber ich muss Sie enttäuschen, zu diesen Punkten erzähle ich in diesem Video nichts, weil wir uns mit der Low-Level-Threading-Schnittstelle, sprich, dem Speichermodell, beschäftigen. Noch ein paar Worte zum C++-Speichermodell, es ist an das Java-Speichermodell angelehnt, tatsächlich hatten C++ beim Entwurf des Speichermodells Doug Lea mitgewirkt, Doug Lea, der das Java-Speichermodell entworfen hat. Das C++-Speichermodell basiert auf der sequenziellen Konsistenz. Die sequenzielle Konsistenz sagt im Wesentlichen aus, dass ein Thread seine Instruktionen in der Reihenfolge ausführt, in der sie im Source Code stehen. C++ geht aber einen Schritt weiter wie Java und auch C#, C++ erlaubt den sogenannten Bruch der sequenziellen Konsistenz. Der Bruch der sequenziellen Konsistenz heißt, dass ein Thread A die Instruktionen aus dem Thread B in einer anderen Reihenfolge wahrnehmen kann, als es der Thread B ausgeführt hat. Im Wesentlichen geht es beim C++-Speichermodell um das synchronisierte Arbeiten mit atomaren und nicht-atomaren Datentypen. Das Schöne des C++-Speichermodells ist es nämlich, dass atomare Datentypen Bedingungen an nicht-atomare Datentypen stellen, sodass nicht-atomare Datentypen auch wohldefiniert ausgeführt werden. Zum Abschluss will ich Ihnen noch das große Bild liefern. Mir ist es natürlich vollkommen bewusst, dass das C++-Speichermodell eine extreme intellektuelle Hürde ist, weil es doch relativ anspruchsvoll ist. Und das will ich genau in diesem Bild vermitteln. Mit Multithreading befinden wir uns bereits in der Expertendomäne. Es ist also ein sehr anspruchsvolles Gebiet. In dieser Domäne tauchen wir ein Stück tiefer, in die sogenannte sequenzielle Konsistenz. Hier beschäftigen wir uns mit atomaren Datentypen und Operationen auf diesen atomaren Datentypen. Mit der Acquire-Release-Semantik wird die Domäne nochmals ein Stück anspruchsvoller. Bei der Acquire-Release-Semantik geht es nicht wie bei der sequenziellen Konsistenz darum, dass sich ganze Threads miteinander synchronisieren, sondern da geht es nur darum, dass atomare Operationen auf den gleichen atomaren Variablen, Acquire und Release-Semantiken aufbauen, also Synchronisationssemantik umsetzen. Ja und dann sind wir im Kern, in der Relaxed-Semantik, da gilt selbst das nicht mehr. In dieser Lektion habe ich Ihnen einen Überblick über das C++-Speichermodell gegeben.

C++: Speichermodell

Verstehen und nutzen Sie die Konzepte und die zugrundeliegenden TEchnolgien des Speichermodells in C++.

1 Std. 29 min (29 Videos)
Derzeit sind keine Feedbacks vorhanden...
 
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:24.11.2016

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!