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 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
//! Miscellaneous tools for concurrent programming. //! //! ## Atomics //! //! * [`AtomicCell`], a thread-safe mutable memory location. //! * [`AtomicConsume`], for reading from primitive atomic types with "consume" ordering. //! //! ## Thread synchronization //! //! * [`Parker`], a thread parking primitive. //! * [`ShardedLock`], a sharded reader-writer lock with fast concurrent reads. //! * [`WaitGroup`], for synchronizing the beginning or end of some computation. //! //! ## Utilities //! //! * [`Backoff`], for exponential backoff in spin loops. //! * [`CachePadded`], for padding and aligning a value to the length of a cache line. //! * [`scope`], for spawning threads that borrow local variables from the stack. //! //! [`AtomicCell`]: atomic/struct.AtomicCell.html //! [`AtomicConsume`]: atomic/trait.AtomicConsume.html //! [`Parker`]: sync/struct.Parker.html //! [`ShardedLock`]: sync/struct.ShardedLock.html //! [`WaitGroup`]: sync/struct.WaitGroup.html //! [`Backoff`]: struct.Backoff.html //! [`CachePadded`]: struct.CachePadded.html //! [`scope`]: thread/fn.scope.html #![warn(missing_docs)] #![warn(missing_debug_implementations)] #![cfg_attr(not(feature = "std"), no_std)] #![cfg_attr(feature = "nightly", feature(cfg_target_has_atomic))] #[macro_use] extern crate cfg_if; #[cfg(feature = "std")] extern crate core; cfg_if! { if #[cfg(feature = "alloc")] { extern crate alloc; } else if #[cfg(feature = "std")] { extern crate std as alloc; } } #[cfg_attr( feature = "nightly", cfg(all(target_has_atomic = "cas", target_has_atomic = "ptr")) )] pub mod atomic; mod cache_padded; pub use cache_padded::CachePadded; mod backoff; pub use backoff::Backoff; cfg_if! { if #[cfg(feature = "std")] { #[macro_use] extern crate lazy_static; pub mod sync; pub mod thread; } }