static G_MAP: Lazy<Mutex<HashMap<i32, i32>>> = Lazy::new( || { let map: HashMap<i32, i32> = HashMap::new(); Mutex::new(map) } );
fn main() { println!("{:?}", fib(20)); }
fn fib(num: i32) -> i32 { if num == 1 || num == 2 { return 1; }
if G_MAP.lock().unwrap().get(&num) == None {
let a = fib(num - 1) + fib(num - 2);
G_MAP.lock().unwrap().insert(num, a);
return a;
}
G_MAP.lock().unwrap().get(&num).unwrap().abs()
}
static G_MAP: Lazy<Mutex<HashMap<i32, i32>>> = Lazy::new( || { let map: HashMap<i32, i32> = HashMap::new(); Mutex::new(map) } );
fn main() { println!("{:?}", fib(20)); }
fn fib(num: i32) -> i32 { if num == 1 || num == 2 { return 1; }
if G_MAP.lock().unwrap().get(&num) == None {
G_MAP.lock().unwrap().insert(num, fib(num - 1) + fib(num - 2));
return a;
}
G_MAP.lock().unwrap().get(&num).unwrap().abs()
}
1
共 3 条评论, 1 页
评论区
写评论秒懂 谢大佬!
Mutex
不可重入,G_MAP.lock().unwrap()
的时候就持锁了,调用 insert 的时候递归,死锁了按markdown改一下