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++: Multithreading

std::call_once und std::once_flag

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Mit der Funktion std::call_once in Kombination mit dem Flag std::once_flag lassen sich Variablen threadsicher initialisieren.
03:12

Transkript

In dieser Lektion möchte ich Ihnen die Funktion std::call_once in Kombination mit dem Flag, std::once_flag, genau vorstellen. Mithilfe von std::call_once erreichen Sie, dass eine Funktion genau nur einmal von mehreren Threads ausgeführt wird. Ja und wenn Sie an dieser Funktion eine Variable initialisieren, wird diese Variable genau nur einmal und threadsicher initialisiert. Wie funktioniert das? Mit std::call_once registrieren Sie eine aufrufbare Einheit. Eine aufrufbare Einheit ist alles, was sich wie eine Funktion verhält. Es muss keine Funktion sein. Was kann das sein? Das kann natürlich eine Funktion sein. Das kann ein Funktionsobjekt sein, für den XX-Operator, oder Klammeroperator überladen ist. Und das kann einfach nur eine Lambdafunktion sein. Mithilfe des std::once_flag stellt die C++ Laufzeit sicher, dass nur eine genau dieser aufrufbaren Einheiten ausgeführt wird. Das heißt, anders ausgedrückt. Sie können auch mehrere aufrufbare Einheiten mithilfe des gleichen std::once_flag annotieren, sodass es sicher gestellt ist, dass es nur genau eine davon ausgeführt wird. Ich habe Ihnen ein kleines Beispielchen mal vorbereitet. Hier habe ich eine Funktion initSharedDataFunktion(). Hier werden die geteilten Variablen initialisiert, eben threadsicher initialisiert. Und das ist mein std::once_flag. Und durch diesen Aufruf std::call_once initSharedDataFlag, initSharedDataFunktion() stellt die C++ Laufzeit sicher, dass die Funktion initSharedDataFunktion() genau nur einmal ausgeführt wird. Das ganze möchte ich Ihnen jetzt noch am Beispiel zeigen. Ich habe hier ein einfaches Beispiel. In dem Beispiel lass ich vier Threads laufen. Jeder von diesen Threads führt die Funktion do_once() aus. Dann schauen Sie doch mal die Funktion do_once() an. Diese Funktion annotiere ich, dass die Lambdafunktion hier nur einmal aufgerufen wird. Das Ganze mache ich mithilfe des once_flag. Und wenn ich das Programm jetzt ausführe, sehen Sie, dass nur einmal die Lambdafunktion ausgeführt wird, obwohl ich sie hier von vier Threads aus starte. Ich habe keine Ahnung, welche von dieser Threads hier zum Zuge kommt, das interessiert mich aber nicht. Interessiert nur, dass es genau einmal geschieht. In dieser Lektion habe ich Ihnen gezeigt, wie Sie die Funktion call_once im Kombination mit dem once_flag verwenden können, um sicher zu stellen, dass eine aufrufbare Einheit nur genau einmal ausgeführt wird. Wenn Sie nun in dieser aufrufbaren Einheit eine gemeinsame Variable initialisieren, ist sichergestellt, dass die gemeinsame Variable threadsicher initialisiert wird.

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!