29 lines
510 B
Rust
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);
|