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

Klassifizierung der Speichermodelle

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Zunächst gilt es, Ordnung in den sechs Speichermodellen zu schaffen. Dabei hilft die Beantwortung zweier einfacher Fragen.
04:03

Transkript

In dieser Lektion möchte ich Ordnung in die sechs verschiedenen C++-Speichermodelle bringen. Um Ordnung in diese sechs verschiedenen Speichermodelle zu bringen, helfen mir zwei Fragen. Die erste Frage ist: Für welche atomaren Operationen sind die Speichermodelle konzipiert? Die zweite Frage: Welche Synchronisations- und Ordnungsbedingungen definieren die Speichermodelle? Jetzt gehe ich auf die Fragen genauer ein. Für welche atomaren Operationen sind die Speichermodelle konzipiert? Es gibt prinzipiell drei verschiedene Arten von Operationen. Es gibt "read" oder "lese", "write" oder "schreibe" und "read-modify-write", also Lese- und Schreiboperationen. Das C++-Speichermodell "memory_order_acquire_release" und "memory_order_sequenzielle_konsistenz" oder English "sequential_consistency". Die beiden haben eine "read-modify-write"-Semantik. Gerne spricht man im Englischen auch statt einer "read"-Semantik von einer "read_acquire"- oder statt einer "write"-Semantik von einer "store-release"-Semantik. Wenn Sie genau mitgezählt haben, habe ich jetzt erst fünf Speichermodelle vorgestellt. Das sechste fehlt: "memory_order_relaxed". Das definiert nämlich keine Synchronisations- und Ordnungsbedingung. Daher passt es natürlich auch nicht in diese Klassifizierung hier rein. Nun will ich noch alle atomaren Operationen anhand dieser Frage klassifizieren. Hier sind alle Operationen. Sie sehen, z.B. "is_lock_free" und "load" sind reine Leseoperationen, "clear" und "store" sind reine Schreiboperationen und alle anderen Operationen, ob es "test_and_set" ist, "exchange" oder "compare_exchange_strong", das sind alles "read-modify-write"-Operationen. D. h. es sind alles Operationen, wo es die zwei Operationen atomar anbieten müssen. Was heißt das konkret? Wenn ich, wie hier, eine atomare Variable "atom" habe, dann kann ich die laden. Laden kann ich sie, indem ich, in diesem Fall, explizit "Speichermodell" eingebe. In diesem Fall gebe ich explizit "acquire_release"-Semantik an. Da es eine Ladeoperation ist, benötige ich aber nur "acquire"-Semantik, d. h. es ist äquivalent dazu, wie wenn ich schreibe "std: :memory_order_acquire". Wenn ich diese Ladeoperation hier nochmal verwende, diesmal aber sie mit "release"-Semantik, also mit Schreibsemantik, versehe, dann macht es relativ wenig Sinn. D. h. in diesem Fall ist es äquivalent zu "relaxed", also ich gebe gar keine Synchronisations- und Ordnungsbedingung an. Jetzt komme ich zur Beantwortung der zweiten Frage. Welche Synchronisations- und Ordnungsbedingungen definieren die Speichermodelle? Hier gibt es drei Klassifizierungen. Erstmal die sequenzielle Konsistenz. Das ist die "default". Das Flag heißt "memory_order_seq_ cst" und die sequenzielle Konsistenz definiert eine globale Ordnung auf allen Threads. Ich sage da gerne dazu: Das ist das, was unserer Intuition entspricht. Das zweite Modell ist die sog. "acquire-release"-Semantik. Hier werden nicht mehr Threads synchronisiert, sondern es werden Lese- und Schreiboperationen auf den gleichen atomaren Variablen synchronisiert. In diesem Fall können Sie vier verschiedene C++-Speichermodelle anwenden: "memory_order_consume", "acquire", "release" und "acquire_release". Und jetzt wird mir ganz schwach, sprich die "relaxed"-Semantik. Hier gelten keine Synchronisations- und Ordnungsbedingungen und das Flag ist "memory_order_relaxed". In dieser Lektion habe ich die sechs Speichermodelle klassifiziert. Klassifiziert habe ich sie aufgrund von zwei Fragen: Für welche Operationen sind die C++-Speichermodelle konzipiert? Das waren "read"-, "write"- und "read-and-write"-Operationen. Die zweite Frage, die ich beantwortet habe: Welche Synchronisations- und Ordnungsbedingungen definieren die Speichermodelle?

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!