次のコードがdead lockしない理由が分かりません。
rust
1use std::sync::Mutex;2 3fn main() {4 let x = Mutex::new(0usize);5 6 // does'nt deadlock7 *x.lock().unwrap() = 1; 8 9 let y = x.lock().unwrap();10 println!("{}", y);11}
次のようにx
への書き込みを2行に分けると期待通りdeadlockします。
rust
1use std::sync::Mutex;2 3fn main() {4 let x = Mutex::new(0usize);5 6 // deadlock 7 let mut a = x.lock().unwrap();8 *a = 1;9 10 let y = x.lock().unwrap();11 println!("{}", y);12}
別の変数を用意せずに1行だけ使う場合はMutexGuard
がdropされる仕様なのかなと推測しているのですが、該当する情報ソースが見つからず質問させていただきました。
0 コメント