Kontakt aufnehmen
 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)

Teilnehmerzahl


Preis je Teilnehmer (exkl. USt)

Erfahrungsberichte (1)

Kommende Kurse

Verwandte Kategorien