当多个函数访问互斥保护结构的不同字段时,如何避免死锁,如下所示
use std::sync::Mutex;
#[derive(Default)]
struct InnerData {
ia: i32,
ib: i32,
}
#[derive(Default)]
struct OuterData {
oa: i32,
ob: Mutex<InnerData>,
}
impl OuterData {
fn foo(&self) {
println!("fn foo begin");
let b_mg = &mut self.ob.lock().unwrap();
b_mg.ib = 5;
println!("fn foo end");
}
}
fn main() {
let mut outer_data: OuterData = Default::default();
let b_mg = &mut outer_data.ob.lock().unwrap();
b_mg.ia = 3;
if b_mg.ia == 3 {
outer_data.foo();
}
}
1条答案
按热度按时间kq0g1dla1#
在这种情况下,您可以将其更改为以下内容: