rt/rust/examples/once.rs

35 lines
606 B
Rust

use core::sync::atomic::{AtomicUsize, Ordering};
const ITERATIONS: usize = 100;
rt::once!(ONCE);
rt::semaphore!(SEM);
static X: AtomicUsize = AtomicUsize::new(0);
fn f() {
X.fetch_add(1, Ordering::Relaxed);
}
fn oncer() {
rt::task::drop_privilege();
for _ in 0..ITERATIONS {
ONCE.call_once(f);
}
}
fn oncer_stop() {
oncer();
rt::stop();
}
fn main() {
rt::task!(oncer, rt::task::STACK_MIN, 1);
rt::task!(oncer_stop, rt::task::STACK_MIN, 1);
rt::start();
if X.load(Ordering::Relaxed) != 1 {
panic!("X did not have the expected value");
}
}