use std::collections::HashMap;
fn main() {
use std::sync::{Arc, Mutex, Condvar};
use std::thread;
let pair = Arc::new((Mutex::new(false), Condvar::new()));
for i in 0..3 {
let pair2 = pair.clone();
thread::spawn(move || {
loop {
thread::sleep(std::time::Duration::from_secs(1));
let (lock, cvar) = &*pair2;
let mut started = lock.lock().unwrap();
*started = true;
cvar.notify_one();
println!("thread x {}", i);
}
});
}
for i in 0..2 {
let pair2 = pair.clone();
thread::spawn(move || {
loop {
let (lock, cvar) = &*pair2;
let mut started = lock.lock().unwrap();
while !*started {
started = cvar.wait(started).unwrap();
*started = false;
println!("thread y {}", i);
thread::sleep(std::time::Duration::from_secs(1));
}
}
});
}
println!("all done!");
thread::park();
}