Dieser Workshop zu Multithreading mit modernem C++ wird die High-Level-Schnittstelle und die Low-Level-Details behandeln. In der High-Level-Schnittstelle werden Teilnehmer Threads, Locks und Mutexe, Thread-lokale Daten, Bedingungsvariablen und Tasks genau kennen lernen. Dies nicht nur in der Theorie, sondern vor allem in der Praxis. In den Low-Level-Details bekommen die Teilnehmer eine Idee, welche Probleme das C++-Speichermodell adressiert und was es heißt, lockfrei zu programmieren.
Die Teilnehmer sollten einen Rechner mit mindestens einem C++11-Compiler mitbringen.
Agenda
- ab 10.00: Registrierung und Begrüßungskaffee
- 11.00: Beginn
- 11.00 - 12.30:
- Threads
- Erzeugung von Threads
- Lebenszeit von Threads
- Datenübergabe an Threads
- Von Threads geteilten Variablen
- Schutz mit Mutexen
- Schutz mit Locks
- 12.30 - 13.30: Mittagspause
- 13.30 - 15.00:
- Thread-sicheres Initialisieren von Daten
- Thread-lokale Daten
- Bedingungsvariablen
- Gefahren von Bedingungsvariablen
- 15.00 - 15.15: Kaffeepause
- 15.15 - 16.30:
- Promise und Future (Tasks)
- Vergleich von Threads und Tasks
- std::async
- std::packaged_task
- std:: promise und std::future
- Vergleich von Tasks und Bedingungsvariablen
- 16.30 - 16.45: Kaffeepause
- 16.45 - 18.00:
- Einblick in das C++ Speichermodell
- Atomare Datentypen
- Parallele Algorithmen der Standard Template Library (C++17)
- Ausführungsstrategien
- Die neuen Algorithmen
- ca. 18 Uhr: Ende
Technische Anforderungen:
- Jeder Teilnehmer benötigt einen Rechner mit einem C++ Compiler, der zu mindestens C++11 unterstützt. Optimal ist ein C++14 fähiger Compiler.
- Die Schulungsunterlagen und die Beispiele werde ich auf einem USB-Stick mitbringen. Falls Sie keinen USB-Stick an Ihren Rechner anschließen können, benötige ich eine E-Mail Adresse, an die ich die Schulungsunterlagen bereits vorab schicken kann. Diese sollten dann auf dem Schulungsrechner gespeichert werden.
Vorkenntnisse
C++ und Grundlagen Multithreading
Lernziele
Ziel des Workshops ist es, die High-Level-Threading-Schnittstelle zu verstehen und sicher anzuwenden. Dabei werden die Low-Level-Details wertvolle Dienste erweisen.
//
Rainer Grimm
@rainer_grimm
ist seit vielen Jahren als Softwarearchitekt, Team- und Schulungsleiter tätig. Auf seinem Blog "Modernes C++" auf heise Developer beschäftigt er sich intensiv mit seiner Leidenschaft C++. Seit 2016 steht er auf selbstständigen Beinen. Insbesondere das Vermitteln von Wissen zu modernem C++ ist ihm eine Herzensangelegenheit. Seine Bücher "C++11 für Programmierer", "C++" und "C++-Standardbibliothek" für die "kurz und gut"-Reihe sind beim Verlag O'Reilly erschienen. Seine englischsprachigen Werke "The C++ Standard Library" und "Concurrency with Modern C++" hat er direkt bei Leanpub veröffentlicht.