39 lines
712 B
Rust
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, 0);
|