Avatar ·

何时在 Rust 的多线程中使用 Mutex 以及何时使用 RwLock?

大家好!我正在学习 Rust 和多线程,遇到了两个同步原语:`Mutex` 和 `RwLock`。它们似乎都能保护数据免受竞态条件的影响,但我不太清楚何时该选择哪一个。 我有一个项目,其中多个线程读取并偶尔写入一个共享缓存(HashMap)。我用 `Mutex` 写了一个简单的例子,但感觉这并不理想,因为读取会阻塞其他读取操作: ```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)); // 读取也需要锁定 let val = data.get(&i).cloned(); println!("Thread {} got {:?}", i, val); })); } for