DF
Size: a a a
DF
DF
as if
они происходили в каком-то тотальном порядкеDF
DF
DF
АГ
DF
M
DF
DF
DF
DF
DF
lock
инструкция-префиксDF
DF
M
DF
DF
M
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.swap(1, Ordering::SeqCst)
});
let child_y = thread::spawn(move || {
y2.store(1, Ordering::SeqCst);
x2.swap(1, 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 = {}", res_x, res_y);
})
}
DF