Э
use loom::thread;
use loom::sync::atomic::{AtomicUsize, Ordering};
use loom::sync::Arc;
fn main() {
loom::model(|| {
let x = Arc::new(AtomicUsize::new(0));
let y = Arc::new(AtomicUsize::new(0));
let x1 = x.clone();
let y1 = y.clone();
let x2 = x.clone();
let y2 = y.clone();
let child_x = thread::spawn(move || {
x1.store(1, Ordering::SeqCst);
y1.load(Ordering::SeqCst)
});
let child_y = thread::spawn(move || {
y2.store(1, Ordering::SeqCst);
x2.load(Ordering::SeqCst)
});
let res_x = child_x.join().unwrap();
let res_y = child_y.join().unwrap();
assert!(res_x != 0 && res_y != 0);
})
}
Есть два треда, один пишет в x единицу и читает y, второй пишет в y единицу и читает из x