1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
#[cfg(not(all(test, loom)))] pub(crate) mod sync { pub(crate) mod atomic { pub(crate) use core::sync::atomic::{fence, AtomicPtr, AtomicUsize, Ordering}; pub(crate) trait AtomicMut<T> { fn with_mut<F, R>(&mut self, f: F) -> R where F: FnOnce(&mut *mut T) -> R; } impl<T> AtomicMut<T> for AtomicPtr<T> { fn with_mut<F, R>(&mut self, f: F) -> R where F: FnOnce(&mut *mut T) -> R, { f(self.get_mut()) } } } } #[cfg(all(test, loom))] pub(crate) mod sync { pub(crate) mod atomic { pub(crate) use loom::sync::atomic::{fence, AtomicPtr, AtomicUsize, Ordering}; pub(crate) trait AtomicMut<T> {} } }