use loom::sync::Arc; use loom::sync::atomic::{AtomicBool, AtomicUsize, Ordering}; loom::model(|| { let ptr = Box::into_raw(Box::new(0)); let flag = Arc::new(AtomicBool::new(false)); let flag2 = flag.clone(); loom::thread::spawn(move || { unsafe { *ptr = 1 }; flag.store(true, Ordering::Relaxed); }); loom::thread::spawn(move || { if flag2.load(Ordering::Relaxed) { assert!(unsafe { *ptr == 1 }); } }); }); this passes, could someone please explain why? thanks!
edit: oh, UB?
3 posts - 3 participants