rust mutex含错误处理的使用
时间: 2024-07-24 08:01:16 浏览: 132
Rust 的 `Mutex` 是一种互斥锁(Mutex),它提供了一种同步机制,用于保护数据在并发访问时的完整性。当多个线程尝试同时访问共享资源时,`Mutex` 可以确保一次只有一个线程能持有锁并执行临界区内的代码。
在 Rust 中,`Mutex<T>` 结构体可以让你创建一个锁定状态的数据 T,例如 `Mutex<Vec<u32>>`。当你需要对这个向量进行修改操作时,应该先获取锁,完成操作后再释放锁:
```rust
use std::sync::{Arc, Mutex};
fn main() {
let mut shared_vec = Arc::new(Mutex::new(vec![1, 2, 3]));
// 创建两个线程,它们将试图访问同一个锁
let thread_1 = std::thread::spawn(move || {
let lock = shared_vec.lock().unwrap(); // 获取锁
*lock += vec![4, 5]; // 修改值
});
let thread_2 = std::thread::spawn(move || {
let lock = shared_vec.lock().unwrap();
println!("Thread 2 sees: {:?}", lock); // 输出当前值
});
// 等待所有任务完成后退出
thread_1.join().unwrap();
thread_2.join().unwrap();
// 错误处理:如果无法获取锁(比如因为另一个线程已经持有),会得到一个 `MutexError`
match shared_vec.lock() {
Ok(mut locked) => {
// 执行其他操作...
locked.extend([6, 7]);
},
Err(err) => {
// 捕获并处理错误,如打印日志或返回默认值
println!("Failed to acquire lock: {}", err);
},
}
}
```
阅读全文