Wann man Mutex und wann RwLock in Rust für Multithreading verwendet?
Hallo Kollegen! Ich lerne Rust und Multithreading und bin auf zwei Synchronisationsprimitive gestoßen: `Mutex` und `RwLock`. Beide schützen Daten anscheinend vor Race Conditions, aber ich verstehe nicht ganz, wann man welches wählen sollte.
Ich habe ein Projekt, bei dem mehrere Threads Daten in einem gemeinsamen Cache (HashMap) lesen und gelegentlich schreiben. Ich habe ein einfaches Beispiel mit `Mutex` geschrieben, aber ich habe das Gefühl, dass es nicht optimal ist, weil das Lesen andere Lesevorgänge blockiert:
```rust
use std::sync::{Arc, Mutex};
use std::thread;
use std::collections::HashMap;
fn main() {
let cache = Arc::new(Mutex::new(HashMap::new()));
let mut handles = vec![];
for i in 0..10 {
let cache = Arc::clone(&cache);
handles.push(thread::spawn(move || {
let mut data = cache.lock().unwrap();
data.insert(i, format!("value_{}", i));
// Lesen erfordert ebenfalls eine Sperre
let val = data.get(&i).cloned();
println!("Thread {} hat {:?} erhalten", i, val);
}));
}
for