C++: Multithreading

Aufgaben zum sicheren Initialisieren von Daten

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Zwei Aufgaben erlauben das Üben sicheren Initialisierens, außerdem bekommen Sie ein paar Nachschlage-Hinweise, wenn Sie mehr über threadsichere Dateninitialisierung erfahren möchten.
03:30

Transkript

In dieser Lektion möchte ich Ihnen die Aufgabe zum sicheren Initialisieren der Daten vorstellen. Ich habe eine Datei singleton.cpp vorbereitet, und da sehen Sie die klassische Implementierung des Singleton-Patterns. Leider ist diese Implementierung nicht threadsafe. Was ich Ihnen zeigen werde, ist wie Sie die Funktion mithilfe von std::call_ones und std::ones_flag threadsicher machen. Ich habe hier auch noch weitere Information vorbereitet, zu std::call_ones und std::ones_flag. Können Sie es hier nachlesen. Und wenn Sie die traurige Geschichte zum Double-Checked Locking Pattern besser verstehen wollen, sollen Sie diesem Link hier folgen. Um was geht es bei Double-Checked Locking Pattern? Da geht es darum, dass im klassischen C++ der Singleton-Pattern vermeintlich threadsicher implementiert wurde, tatsächlich war das aber nicht definiertes Value. Hier die Geschichte können Sie schön unter dem Double-Checked Locking Pattern je nachlesen. Nun aber zur der Aufgabe. Anfangen möchte ich hier mit klassischem Singleton-Pattern. So kennen Sie es, das Singleton-Pattern ist Okey, so lange ich es ist nicht von mehreren Threads aus verwende. Wie ist die klassische Implementierung? Hier haben Sie die statische Variable instance, die Sie außer der Klasse definieren müssen, hier durch Null-Pointer, das ist neu mit C++ 11. Und dann müssen Sie dafür sorgen, dass der Konstruktor und der Destruktor da ist. Die setzen wir in diesem Fall auf Default. Und Sie müssen sicherstellen, dass der Copy-Konstruktor und der Copy-Zuweisungsoperator für instanzen von der Klasse MySingleton nicht zur Verfügung steht, und das machen Sie ganz einfach durch Delete. Default, Delete sind alles neue Schlüsselwörter von C++ 11. Wir kommen hier zum Herz des Singltons, hier ist der Aufruf getInstance. Hier prüfen Sie, ob instance bereits existiert. Wenn nicht, instanziieren Sie es hier neu. Wenn es aber schon existiert, können Sie einfach den instance zurückgeben. Ja, und hier sehen Sie die Anwendung davon. Und das ist statisch nicht threadsafe. Weil zum Beispiel das hier nicht threadsafe ist. Dann komme ich zur threadsicheren Implementierung. Mit dem once_flag und der Funktion call_once. Gut, was hat sich verändert? Erstens hat meine Klasse jetzt ones_flag initInstanceFlag. Und zweitens, in der Funktion getInstance, die mir MySingleton erzeugt, rufe ich std::call_ones, initInstanceFlag, MySinglton::initSingleton auf. Das heißt, mithilfe des initInstanceFlags hier, stelle ich sicher, dass die Funktion MySinglton::initSingleton genau nur einmal aufgerufen wird. Und was mache ich hier? Genau hier instanziiere ich MySingleton. Hier der Rest ist fast gleich. Nur, dass ich in diesem Fall von zwei Threads aus auf getInstance zugreife. Ja, es fällt noch die Anwendung. Die haben wir hier. Und Sie sehen, das sind die zwei gleichen Adressen, das scheinen wohl die gleichen Objekte zu sein. Hier.

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!