|  | //! 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(alloc))] | 
|  | #![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 = "nightly")] { | 
|  | extern crate alloc; | 
|  | } else { | 
|  | mod alloc { | 
|  | extern crate std; | 
|  | pub use self::std::*; | 
|  | } | 
|  | } | 
|  | } | 
|  |  | 
|  | 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; | 
|  | } | 
|  | } |