use std::sync::{Arc, Condvar, Mutex};
use std::thread;
use std::time::Duration;
fn main() {
let pair = Arc::new((Mutex::new(0), Condvar::new()));
for i in 0..3 {
let pair = pair.clone();
thread::spawn(move || {
let (lock, cvar) = &*pair;
let mut guard = lock.lock().unwrap();
while *guard < 5 {
guard = cvar.wait(guard).expect("等待失败");
println!("等待结果: i={i} v={}", *guard);
}
println!("等待结束: i={i} v={}", *guard);
});
}
let (lock, cvar) = &*pair;
for _ in 0..10 {
{
let mut guard = lock.lock().unwrap();
*guard += 1;
println!("+1, now is {}", *guard);
}
cvar.notify_all();
thread::sleep(Duration::from_secs(1));
}
}