rt/rust/examples/rwlock.rs

39 lines
712 B
Rust

#![no_main]
struct Point {
x: u32,
y: u32,
}
rt::rwlock!(POINT, Point, Point { x: 0, y: 0 });
fn reader() {
rt::task::drop_privilege();
loop {
let p = POINT.read();
assert_eq!(p.x, p.y, "point coordinates did not match");
}
}
fn writer() {
rt::task::drop_privilege();
loop {
let mut p = POINT.write();
p.x += 1;
p.y += 1;
drop(p);
rt::task::sleep(1);
}
}
fn timeout() {
rt::task::drop_privilege();
rt::task::sleep(50);
rt::trap();
}
rt::task!(reader, rt::task::STACK_MIN, 1);
rt::task!(reader, rt::task::STACK_MIN, 1);
rt::task!(writer, rt::task::STACK_MIN, 1);
rt::task!(timeout, rt::task::STACK_MIN, 2);