rt/rust/examples/notify.rs

33 lines
626 B
Rust

#![no_main]
const N: i32 = 10;
rt::notify!(NOTE);
fn notifier() {
rt::task::drop_privilege();
for _ in 0..N {
rt::task::sleep(5);
NOTE.add(1);
}
rt::task::sleep(15);
NOTE.post();
}
fn waiter() {
rt::task::drop_privilege();
for _ in 0..N {
assert_eq!(
NOTE.timed_wait_clear(1, 10).expect("wait timed out"),
1,
"wait returned the wrong value"
);
}
assert!(NOTE.timed_wait(10).is_none(), "wait didn't time out");
rt::trap();
}
rt::task!(notifier, rt::task::STACK_MIN, 0);
rt::task!(waiter, rt::task::STACK_MIN, 0);