• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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