[−][src]Function tao_of_rust::ch11::thread_unsafe::unsafe_seq
pub fn unsafe_seq()
竞态条件与临界区
Basic usage: 一段线程不安全的代码
但实际执行多次会看到不同的输出结果,基本会出现以下两种情况:
- main主线程输出的结果中会莫名其妙少一位,并不是从0到10的连续值。
- child子线程输出的结果和main主线程输出的结果有重复。
use std::thread; static mut V: i32 = 0; fn unsafe_seq() -> i32 { unsafe { V += 1; V } } fn main() { let child = thread::spawn(move || { for _ in 0..10 { unsafe_seq(); unsafe{println!("child : {}", V);} } }); for _ in 0..10 { unsafe_seq(); unsafe{println!("main : {}", V);} } child.join().unwrap(); }Run