1 // Copyright 2016 Amanieu d'Antras 2 // 3 // Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or 4 // http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or 5 // http://opensource.org/licenses/MIT>, at your option. This file may not be 6 // copied, modified, or distributed except according to those terms. 7 8 //! This library provides implementations of `Mutex`, `RwLock`, `Condvar` and 9 //! `Once` that are smaller, faster and more flexible than those in the Rust 10 //! standard library. It also provides a `ReentrantMutex` type. 11 12 #![warn(missing_docs)] 13 #![warn(rust_2018_idioms)] 14 #![cfg_attr(feature = "nightly", feature(llvm_asm))] 15 16 mod condvar; 17 mod elision; 18 mod fair_mutex; 19 mod mutex; 20 mod once; 21 mod raw_fair_mutex; 22 mod raw_mutex; 23 mod raw_rwlock; 24 mod remutex; 25 mod rwlock; 26 mod util; 27 28 #[cfg(feature = "deadlock_detection")] 29 pub mod deadlock; 30 #[cfg(not(feature = "deadlock_detection"))] 31 mod deadlock; 32 33 // If deadlock detection is enabled, we cannot allow lock guards to be sent to 34 // other threads. 35 #[cfg(all(feature = "send_guard", feature = "deadlock_detection"))] 36 compile_error!("the `send_guard` and `deadlock_detection` features cannot be used together"); 37 #[cfg(feature = "send_guard")] 38 type GuardMarker = lock_api::GuardSend; 39 #[cfg(not(feature = "send_guard"))] 40 type GuardMarker = lock_api::GuardNoSend; 41 42 pub use self::condvar::{Condvar, WaitTimeoutResult}; 43 pub use self::fair_mutex::{const_fair_mutex, FairMutex, FairMutexGuard, MappedFairMutexGuard}; 44 pub use self::mutex::{const_mutex, MappedMutexGuard, Mutex, MutexGuard}; 45 pub use self::once::{Once, OnceState}; 46 pub use self::raw_fair_mutex::RawFairMutex; 47 pub use self::raw_mutex::RawMutex; 48 pub use self::raw_rwlock::RawRwLock; 49 pub use self::remutex::{ 50 const_reentrant_mutex, MappedReentrantMutexGuard, RawThreadId, ReentrantMutex, 51 ReentrantMutexGuard, 52 }; 53 pub use self::rwlock::{ 54 const_rwlock, MappedRwLockReadGuard, MappedRwLockWriteGuard, RwLock, RwLockReadGuard, 55 RwLockUpgradableReadGuard, RwLockWriteGuard, 56 }; 57 pub use ::lock_api; 58