C++: Multithreading

Mutex

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Ein Mutex stellt sicher, das der Zugriff mehrerer Threads auf einen kritischen Bereich geordnet nacheinander geschieht.
03:14

Transkript

In dieser Lektion möchte ich Ihnen das Konzept eines Mutex genauer erklären. Ein Mutex stellt sicher, dass nur ein Thread exklusiv zu einem Zeitpunkt auf eine gemeinsame Variable, noch allgemeiner ausgedrückt, einem kritischen Bereich zugreifen kann. Denn, Sie wissen, wenn zwei Threads gleichzeitig auf einen kritischen Bereich zugreifen und in diesem kritischen Bereich befindet sich eine Variable, die veränderlich ist, ist Ihr Programmverhalten undefiniert. Und damit es nicht passier, gibt es Mutexe. Um sie zur verwenden, benötigen Sie den Header "Mutex". Und die gibt es in verschiedenen Geschmacksrichtungen die Mutexe. Ich habe hier mal die vier Stück vorgestellt, die C++ 11 kennt, C++14 fügt einen neuen hinzu. Es gibt den Mutex, Recursive_Mutex, den können Sie eben recursive aufrufen, zum Beispiel, wenn Sie eine Funktion haben, die sich selbst aufruft. Dann gibt es den Timed_Mutex und den Recursive_Timed_Mutex. Timed_Mutex heißt eben, ich versuche für eine gewisse Zeitdauer oder bis zu einem gewissen Zeitpunkt dem Mutex zu locken, wenn nicht, lasse ich es. Das sehen Sie hier, dass sind die zwei Funktionen "lock_for" und "lock_until". Ja, mit C++14 gibt es zusätzlich den sogenannten "std: :shard_timed_mutex", denn wenn Sie verwenden im Kombination mit einem besonderen Lock, können Sie Reader-Writer Lock implementieren. Ja, das war die Theorie. Nun kommt die Praxis. Als Beispiel verwende ich in diesem Fall, das Programm mit dem Workern. In diesem Fall schütze ich "std: :cout" mit dem eingenen Mutex. Dann nenne ich das entsprechend auch "coutMutex" und was ich tue ist, dass ich vor dem Aufruf, vor std: :cout und nach dem Aufruf von std: :cout ein Lock setze und es wieder freigebe. Damit ist sichergestellt, dass das innerhalb des Locks, der sogenannte kritische Bereich, nur exklusiv von einem Thread betreten werden kann. Das heißt auch, anders ausgedrückt, Die Ausgaben von "std: :cout" können sich nicht überlappen. Ja, und dieses ganze Szenario kennen Sie natürlich noch. Ich habe jetzt meine Threads, meine 6 Stück, die Workers und jeder Worker hat seine 3 Arbeitspakete zu erledigen und schreibt seine Namen, inklusive die Nummer seines Arbeitspaketes auf std: :cout. Ja, und wenn es dann vorbei ist, sagt der Boss zu seinen Arbeitern, ihr könnt jetzt nach Hause gehen. Und wenn ich das jetzt ausführe das Programm, sehen Sie, dass diesmal alles wohlgeordnet ist. Std: :cout überlappt sich nicht. Jede Worker schreibt seine Ausgabe auf std: :cout, ohne das durch ein anderen Worker gestört wird. In dieser Lektion habe ich Ihnen das Konzept eines Mutex vorgestellt. Mutex steht für mutual exclusion, bedeutet, nur ein Thread kann dem kritischen Bereich, der durch ein Mutex definiert wird betreten.

C++: Multithreading

Lernen Sie die High-Level Threading-Schnittstelle in C++ kennenb und nutzen, die Sie in Form von Threads, Tasks, Locks und Bedingungsvariablen zur Anwendung bringen.

2 Std. 40 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...
Software:
Exklusiv für Abo-Kunden
Erscheinungsdatum:16.08.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!