C++: Multithreading

std::lock_guard

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
std::lock_guard ist für den einfachen Anwendungsfall konzipiert. Er verwaltet den Lebenszyklus seines Mutex.
03:29

Transkript

In dieser Lektion möchte ich Ihnen den std::lock_guard, den einfachen der beiden Locks C++, genauer vorstellen. Das tue ich wie immer erstmal in der Theorie und dann in der Praxis. Der std::lock_guard ist für den einfachen Anwendungsfall konzipiert. Was heißt das? Der std::lock_guard kann nicht viel, er kann eigentlich nur zwei Dinge. Er kann seinen Mutex im Konstruktor locken und er kann wieder im Destruktor anlocken, mehr kann er nicht, das macht aber gut und [unverständlich]. Der steht im Gegensatz zu seinem großen Bruder, std::unique_lock, der ein deutlich mächtigeres Interface besitzt. Und hier zeige ich Ihnen den lock_guard in der Anwendung. Sie sehen, hier kann ich nicht viel zeigen. Hier habe ich einen Mutex, "myMutex", diesen Mutex verwende ich, um den lock_guard damit zu initialisieren, und Sie sehen schon in dem aufruf hier myMutex, wird myMutex gelockt. Der Destruktor für meinen Lock wird genau zu dem Zeitpunkt aufgerufen, wenn myLock sein Gültgkeitsbereich verlässt. Und das ist genau hier. Egal, wie ich hier lande, ob ich hier eine Ausnahme werfe, und ob ich regulär hier lande. Der Deskruktor von myLock wird aufgerufen, und damit wird myMutex freigegeben, sprich Unlock wird auf myMutex aufgerufen. So, das war die Thorie, jetzt folgt die Praxis. Ich denke Sie kennen mittlerweile den Arbeitsablauf, den ich hier beschreibe, mit dem ich myLock_guard eben synchronisierter ausfüllen will. Das Szenario ist, der Boss startet seine sechs Worker, jeder Worker hat einen Arbeitspaket zu leisten, genau genommen hat jeder Worker 3 Arbeitspakete zu leisten, jedes Arbeitspaket benötigt eine Fünftelsekude, ja und dann, wenn jeder Worker mit einem Arbeitspaket fertig ist, schreibt er seinen Namen auf std::cout, und damit jeder Arbeiter seine Satz nicht unkoordiniert auf std::cout rausschreibt, habe ich std::cout hier durch einen lock_guard geschützt. Das heißt, mein coutMutex hier, verpacke ich in den lock_guard und immer bevor ich was auf std::cout rausschreibe, ziehe ich das Lock, das heißt ich locke den Mutex hier, das heißt, von hier bis hier kann immer nur ein Thread agieren, und das ist mein kritischer Bereich, diesen schütze ich, und somit habe ich sichergestellt, dass jeder Arbeiter seinen Nachbearbeiter respektiert, wenn er etwas auf std::cout rausschreibt. In dem Fall ist die Ausgabe vollkommen kontrolliert. Schauen wir uns mal an, lock_guard. Sie sehen, hier gibt es keine überlappenden Ausgaben auf std::cout. Das kann natürlich jetzt noch ewig lange weiterspielen, aber ich denke es langweilt Sie. In dieser Lektion habe ich Ihnen den lock_guard vorgestellt, der lock_guard, der für den einfachen Anwendungsfall konzipiert ist, das heißt, der lock_guard kann nur im Konstruktor den Mutex locken und im Destruktor den Mutex wieder freigeben, sprich unlocken.

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!