1行だけのlockはdead lockしないのはなぜ

次のコードが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 コメント