💡 1. Concurrency mit Arc & Mutex
Um Daten sicher zwischen mehreren Threads zu mutieren, kombiniert man atomare Referenzzählung (`Arc`) mit exklusiven Mutex-Locks:
use std::sync::{Arc, Mutex};
use std::thread;
fn main() {
// 1. Thread-sicherer Zähler im Heap:
let counter = Arc::new(Mutex::new(0));
let mut handles = vec![];
for _ in 0..10 {
let counter_clone = Arc::clone(&counter); // Zähler um 1 erhöhen
let handle = thread::spawn(move || {
let mut num = counter_clone.lock().unwrap(); // Mutex sperren
*num += 1;
}); // Mutex wird hier automatisch gedroppt und entsperrt!
handles.push(handle);
}
for handle in handles {
handle.join().unwrap();
}
println!("Ergebnis: {}", *counter.lock().unwrap()); // Garantiert 10!
}
`Arc` ist der Schlüsselbund: Jeder Mitarbeiter erhält eine exakte Schlüsselkopie. `Mutex` ist der Beratungsraum: Es passt immer nur genau eine Person hinein. Wer fertig ist, schließt die Tür auf und der Nächste darf eintreten!
⚡ 2. Quick-Cheat-Sheet
| Typ | Aufgabe | Thread-Sicherheit |
|---|---|---|
Arc | Geteilte Ownership über Threadgrenzen | Atomares Ref-Counting (Thread-Safe) |
Mutex | Exklusiver veränderlicher Zugriff | Sperrt andere Threads bei Zugriff aus |
RwLock | Viele Leser, ein Schreiber | Optimiert für Read-Heavy Workloads |
MutexGuard | Smart Pointer auf geschützte Daten | Entsperrt Mutex automatisch bei Drop |
⚠️ 3. Häufige Stolperfallen (Gotchas & Anti-Patterns)
Wer Rc an thread::spawn übergibt, scheitert am Compiler: Rc.
Sperrt Thread 1 Lock A dann B, und Thread 2 Lock B dann A, hängt das System. Halte Lock-Haltezeiten ultrakurz!
🧠 4. Diagnostischer Selbst-Check
Überprüfe dein Verständnis von Ownership, Borrowing und Speichersicherheit, bevor du den Code in der Web-IDE schreibst.