rt/rust/examples/semaphore.rs

29 lines
510 B
Rust

#![no_main]
const N: i32 = 10;
rt::semaphore!(SEM);
fn poster() {
rt::task::drop_privilege();
for _ in 0..N {
rt::task::sleep(5);
SEM.post();
}
rt::task::sleep(15);
SEM.post();
}
fn waiter() {
rt::task::drop_privilege();
for _ in 0..N {
assert!(SEM.timed_wait(10), "wait timed out");
}
assert!(!SEM.timed_wait(10), "wait didn't time out");
rt::trap();
}
rt::task!(poster, rt::task::STACK_MIN, 1);
rt::task!(waiter, rt::task::STACK_MIN, 1);