35 lines
606 B
Rust
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");
|
|
}
|
|
}
|