🧵 Parallele Systeme & Concurrency

C++ 13: Multithreading (std::thread & std::mutex)

Parallele Programmierung auf modernen Multi-Core-CPUs: Threads starten mit std::thread, kritische Abschnitte absichern mit std::mutex und Deadlocks verhindern mit std::lock_guard.

🧵 1. Thread-Management & Race Conditions

Echte Parallelität erfordert native OS-Threads. C++ bietet mit std::thread eine standardisierte Schnittstelle. Greifen mehrere Threads gleichzeitig schreibend auf gemeinsame Variablen zu, entsteht eine katastrophale Data Race (Undefined Behavior). Mit std::mutex und RAII-Wrappern wie std::lock_guard schützt man kritische Abschnitte threadsicher.

🚪 Didaktische Analogie: Die Flugzeugtoilette mit Riegel

Der gemeinsame Zähler ist die Toilette. Mehrere Passagiere (Threads) wollen gleichzeitig hinein. Der Mutex ist der Riegel: Wer eintritt, schiebt den Riegel vor (lock). Erst wenn der Passagier herauskommt (unlock im Destruktor des lock_guard), kann der nächste eintreten.

⚡ 2. C / C++ Quick-Cheat-Sheet

Syntax / Anweisung Bedeutung & Funktion
std::thread t(funktion, arg1);Startet einen neuen nativen Thread mit übergebenen Parametern.
t.join();Blockiert den aufrufenden Thread, bis t fertig ausgeführt ist.
std::mutex mtx;Gegenseitiger Ausschluss (Mutual Exclusion) für gemeinsame Daten.
std::lock_guard<std::mutex> lock(mtx);RAII-Lock: Sperrt im Konstruktor, entsperrt garantiert im Destruktor.

⚠️ 3. Häufige Stolperfallen & Anti-Patterns

⚠️ Destruktion ungebundener Threads

Wird ein std::thread zerstört, während er noch joinable() ist (weder join() noch detach() gerufen), ruft C++ sofort std::terminate() auf und crasht das Programm!

⚠️ Deadlocks durch verschachteltes Locking

Sperren zwei Threads Mutex A und Mutex B in umgekehrter Reihenfolge, blockieren sie sich gegenseitig für immer. Verwende in solchen Fällen std::scoped_lock (C++17) für atomares Mehrfach-Locking.

🧠 Diagnostischer Selbst-Check

Überprüfe dein Verständnis zu Speichersicherheit, Syntax und Systems-Design mit gezieltem Feedback:

🎯 Aufgaben & Checkliste

💻 In Web-IDE öffnen → ← C++ 12 C++ 14 →