1 pub(crate) use loom::*; 2 3 pub(crate) mod sync { 4 5 pub(crate) use loom::sync::MutexGuard; 6 7 #[derive(Debug)] 8 pub(crate) struct Mutex<T>(loom::sync::Mutex<T>); 9 10 #[allow(dead_code)] 11 impl<T> Mutex<T> { 12 #[inline] new(t: T) -> Mutex<T>13 pub(crate) fn new(t: T) -> Mutex<T> { 14 Mutex(loom::sync::Mutex::new(t)) 15 } 16 17 #[inline] 18 #[track_caller] lock(&self) -> MutexGuard<'_, T>19 pub(crate) fn lock(&self) -> MutexGuard<'_, T> { 20 self.0.lock().unwrap() 21 } 22 23 #[inline] try_lock(&self) -> Option<MutexGuard<'_, T>>24 pub(crate) fn try_lock(&self) -> Option<MutexGuard<'_, T>> { 25 self.0.try_lock().ok() 26 } 27 } 28 pub(crate) use loom::sync::*; 29 30 pub(crate) mod atomic { 31 pub(crate) use loom::sync::atomic::*; 32 33 // TODO: implement a loom version 34 pub(crate) type StaticAtomicU64 = std::sync::atomic::AtomicU64; 35 } 36 } 37 38 pub(crate) mod rand { seed() -> u6439 pub(crate) fn seed() -> u64 { 40 1 41 } 42 } 43 44 pub(crate) mod sys { num_cpus() -> usize45 pub(crate) fn num_cpus() -> usize { 46 2 47 } 48 } 49 50 pub(crate) mod thread { 51 pub use loom::lazy_static::AccessError; 52 pub use loom::thread::*; 53 } 54