🧵 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.
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
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!
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: