次のコードがdead lockしない理由が分かりません。
rust
1use std::sync::Mutex; 2 3fn main() { 4 let x = Mutex::new(0usize); 5 6 // does'nt deadlock 7 *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される仕様なのかなと推測しているのですが、該当する情報ソースが見つからず質問させていただきました。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2023/11/18 09:37