|
|
@ -320,7 +320,7 @@ fn main() {
|
|
|
|
|
|
|
|
|
|
|
|
// 去锁MUTEX2
|
|
|
|
// 去锁MUTEX2
|
|
|
|
let guard = MUTEX2.try_lock();
|
|
|
|
let guard = MUTEX2.try_lock();
|
|
|
|
println!("线程1获取MUTEX2锁的结果: {:?}",guard);
|
|
|
|
println!("线程 {} 获取MUTEX2锁的结果: {:?}", i_thread, guard);
|
|
|
|
// 线程2
|
|
|
|
// 线程2
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
// 锁住MUTEX2
|
|
|
|
// 锁住MUTEX2
|
|
|
@ -329,7 +329,7 @@ fn main() {
|
|
|
|
println!("线程 {} 锁住了MUTEX2, 准备去锁MUTEX1", i_thread);
|
|
|
|
println!("线程 {} 锁住了MUTEX2, 准备去锁MUTEX1", i_thread);
|
|
|
|
sleep(Duration::from_millis(10));
|
|
|
|
sleep(Duration::from_millis(10));
|
|
|
|
let guard = MUTEX1.try_lock();
|
|
|
|
let guard = MUTEX1.try_lock();
|
|
|
|
println!("线程2获取MUTEX1锁的结果: {:?}",guard);
|
|
|
|
println!("线程 {} 获取MUTEX1锁的结果: {:?}", i_thread, guard);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}));
|
|
|
|
}));
|
|
|
@ -349,8 +349,8 @@ fn main() {
|
|
|
|
```console
|
|
|
|
```console
|
|
|
|
线程 0 锁住了MUTEX1,接着准备去锁MUTEX2 !
|
|
|
|
线程 0 锁住了MUTEX1,接着准备去锁MUTEX2 !
|
|
|
|
线程 1 锁住了MUTEX2, 准备去锁MUTEX1
|
|
|
|
线程 1 锁住了MUTEX2, 准备去锁MUTEX1
|
|
|
|
线程2获取MUTEX1锁的结果: Err("WouldBlock")
|
|
|
|
线程 1 获取MUTEX1锁的结果: Err("WouldBlock")
|
|
|
|
线程1获取MUTEX2锁的结果: Ok(0)
|
|
|
|
线程 0 获取MUTEX2锁的结果: Ok(0)
|
|
|
|
死锁没有发生
|
|
|
|
死锁没有发生
|
|
|
|
```
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
|
|