mod atomic_u16; mod atomic_u32; mod atomic_u64; mod atomic_usize; mod barrier; mod mutex; #[cfg(all(feature = "parking_lot", not(miri)))] mod parking_lot; mod unsafe_cell;
pub(crate) mod cell { pub(crate) usesuper::unsafe_cell::UnsafeCell;
}
pub(crate) mod hint { pub(crate) use std::hint::spin_loop;
}
pub(crate) mod rand { use std::collections::hash_map::RandomState; use std::hash::{BuildHasher, Hash, Hasher}; use std::sync::atomic::AtomicU32; use std::sync::atomic::Ordering::Relaxed;
static COUNTER: AtomicU32 = AtomicU32::new(1);
pub(crate) fn seed() -> u64 { let rand_state = RandomState::new();
letmut hasher = rand_state.build_hasher();
// Hash some unique-ish data to generate some new state
COUNTER.fetch_add(1, Relaxed).hash(&mut hasher);
// Get the seed
hasher.finish()
}
}
pub(crate) mod sync { pub(crate) use std::sync::{Arc, Weak};
// Below, make sure all the feature-influenced types are exported for // internal use. Note however that some are not _currently_ named by // consuming code.
match std::env::var(ENV_WORKER_THREADS) {
Ok(s) => { let n = s.parse().unwrap_or_else(|e| {
panic!( "\"{}\" must be usize, error: {}, value: {}",
ENV_WORKER_THREADS, e, s
)
});
assert!(n > 0, "\"{}\" cannot be set to 0", ENV_WORKER_THREADS);
n
}
Err(std::env::VarError::NotPresent) => {
std::thread::available_parallelism().map_or(1, NonZeroUsize::get)
}
Err(std::env::VarError::NotUnicode(e)) => {
panic!( "\"{}\" must be valid unicode, error: {:?}",
ENV_WORKER_THREADS, e
)
}
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.