use std::sync::{Arc, Mutex};
const SPAWNER_SIZE: usize = 4;
fn main() {
let spawner: ato::Spawner<SPAWNER_SIZE> = ato::Spawner::default();
let lock = Arc::new(Mutex::new(Vec::new()));
let lock_clone = lock.clone();
ato::spawn_task!(spawner, res, {
{
let mut num = lock_clone.lock().unwrap();
num.push(1);
}
ato::yield_now().await; {
let mut num = lock_clone.lock().unwrap();
num.push(3);
}
});
res.unwrap();
let lock_clone = lock.clone();
ato::spawn_task!(spawner, res, {
{
let mut num = lock_clone.lock().unwrap();
num.push(2);
}
});
res.unwrap();
spawner.run_until_all_done().unwrap();
let num = lock.lock().unwrap();
assert_eq!(
*num,
Vec::from([1, 2, 3]),
"Lock was not accessed correctly"
);
println!("Lock was accessed correctly: {:?}", *num);
}