Vielen Dank für die Zusendung Ihrer Anfrage! Eines unserer Teammitglieder wird Sie in Kürze kontaktieren.
Vielen Dank, dass Sie Ihre Buchung abgeschickt haben! Eines unserer Teammitglieder wird Sie in Kürze kontaktieren.
Dauer 28 Stunden
Schulungsübersicht
Herausforderungen und Probleme der Nebenläufigkeit
- Hardware-Limitationen der Plattformen: Hardware-Threads, Pipes, Cache-Kohärenz
- Fundamentale Konzepte des Multithreadings (Korrektheit von multithreadeten Programmen, Livelock, Deadlock, Race Condition, Atomicity, Kohärenzmodelle, Flynns Taxonomie)
- In C++ verfügbare Mechanismen zur Implementierung von Multithreading und Multiprocessing
- Implementierung der Standardbibliothek – Inhalte von C++14 bis heute (C++2a)
- Verfügbare Boost-Implementierung – Unterschiede zur Standardbibliothek
Prozesse und Threads
- Multiprocess-Anwendungen versus Multithread-Anwendungen
- Betriebssystem und Threads (kurzer Überblick verfügbarer Implementierungen)
- Synchronisationsmechanismen für Prozesse und Threads
- Strukturelle Implementierung der Synchronisation
- Besonderheiten der objektorientierten Multithreading-Implementierung (Rolle des RAII-Musters)
Speichermodell in C++
- Objekte und Speicheradressen
- Ausführung und Erzwingung von Operationen
- Beziehungen: Synchronisation, Vorherigkeit, Reihenfolgeoperationen bezüglich atomarer Aktionen, Freigabesequenzen
- Speicherbarrieren
- Atomare Operationen
Thread-Management im C++14-Standard und neuer
- Klasse std::thread und Thread-Ausführung
- Thread-Identifikation
- Anhängen und Trennen von Threads
- Threads und Standardcontainer
- Fehlerbehandlung in C++14-Threads
Gegenseitiger Ausschluss und kritische Abschnitte
- Einfache Regeln zum gegenseitigen Ausschluss
- Konzepte (Arten) verfügbarer Blockierobjekte
- Schnelle Einführung in die Zeitbehandlung in C++14 (chrono-Bibliothek)
- Klassen std::mutex, std::timed_mutex, std::shared_mutex und deren Ableitungen
- RAII-Muster zur Handhabung von Sperren (std::lock_guard, std::unique_lock)
- Verzögerte und abhängige Sperren (std::lock)
- Eigentum und Miteigentum an Sperren und Threads
- Lese-Schreib-Problem
- Einfache Initialisierung
- Thread-lokaler (privater) Speicher (std::thread_local)
Sperren und Synchronisation von Threads
- Operationen an Semaphoren
- Rekursive Sperren
- Sperren mit definierter Blockadestufe
- EntscheidungsvARIABLEN und Zusammenarbeit mit Sperren
- Implementierung aktiver und passiver Barriere-Wartezeiten (Idle Waits, Busy Waits)
- Wiederaufnahme der Thread-Ausführung
- Kommunikation zwischen Threads (Aktor-Modell und CSP)
Asynchrone Aufgaben
- Asynchrone Ereignisse und deren Handhabung
- Futures
- Promises
- Gepackte Aufgaben (Packaged Tasks)
Atomare Typen
- Standard-atomare Typen
- Universelle atomare Flagge (std::atomic_flag)
- Klassen-Template „std::atomic[T]“ und deren Spezialisierungen
- Hilfsfunktionen (freie Funktionen) für std::atomic-Typen
Besonderheiten der Multithreading-API-Entwurf
- Design von Strukturen mit Sperren – grob- und feinkörnige Sperren
- Leistung von nebenläufigem Code – Techniken zur Abschätzung und Messung
- Datenpartitionierung
- Skalierbarkeit von Lösungen
- Fehlerbehandlung in der Architektur von Anwendungen
Testing und Debugging von Multithreading-Anwendungen
- Code-Reviews für Multithreading-Operationen
- Besonderheiten beim Testen von Multithreading-Anwendungen
- Unit-Tests
- Erhöhung der Wahrscheinlichkeit kritischer Situationen zum Testzweck
- F formale Methoden des Multithreading-Testings
- Muster der Multithreading-Anwendungsarchitektur im Zusammenhang mit Testing und Debugging (Übersicht)
Erweitertes Thread-Management
- Abhängige Threads (Saga-Muster)
- Vermeidung von Datenkonkurrenz
- Kontrolliertes Anhalten und Unterbrechen von Threads
- Unterbrechung blockierender Aufrufe
- Fehlerbehandlung bei Unterbrechungen
- Aufgabendiebstahl
- Unterbrechen von Aufgaben während des Applikationsabschlusses
Multithreading-Designmuster
- Arten und Verwendungszwecke von Multithreading-Mustern
- Anwendungsbereich der Muster
- Thread-Pool
- Active-Object-Muster
- Sichere multithreading-fähige Queue
- Producer-Consumer-Muster
- Monitor-Muster
- Multithreading-Sicherheit der GoF-Muster
Voraussetzungen
- Fähigkeit, Software-Build-Werkzeuge für C++ in GNU/Linux und/oder MS Windows zu nutzen
- Fortgeschrittene Kenntnisse in C++-Programmierung (prozedurales und objektorientiertes Paradigma)
- Kenntnisse im Bereich der generischen Programmierung (Templates)
Erfahrungsberichte (1)
Praktische Beispiele
Jan Kaniuka - SIEC BADAWCZA LUKASIEWICZ - PRZEMYSLOWY INSTYTUT AUTOMATYKI I POMIAROW PIAP
Kurs - Programowanie wielowątkowe w języku C++
Maschinelle Übersetzung