| //! Non-poisoning synchronous locks. |
| //! |
| //! The difference from the locks in the [`poison`] module is that the locks in this module will not |
| //! become poisoned when a thread panics while holding a guard. |
| //! |
| //! [`poison`]: super::poison |
| |
| use crate::fmt; |
| |
| /// A type alias for the result of a nonblocking locking method. |
| #[unstable(feature = "sync_nonpoison", issue = "134645")] |
| pub type TryLockResult<Guard> = Result<Guard, WouldBlock>; |
| |
| /// A lock could not be acquired at this time because the operation would otherwise block. |
| #[unstable(feature = "sync_nonpoison", issue = "134645")] |
| pub struct WouldBlock; |
| |
| #[unstable(feature = "sync_nonpoison", issue = "134645")] |
| impl fmt::Debug for WouldBlock { |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| "WouldBlock".fmt(f) |
| } |
| } |
| |
| #[unstable(feature = "sync_nonpoison", issue = "134645")] |
| impl fmt::Display for WouldBlock { |
| fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { |
| "try_lock failed because the operation would block".fmt(f) |
| } |
| } |
| |
| #[unstable(feature = "nonpoison_condvar", issue = "134645")] |
| pub use self::condvar::Condvar; |
| #[unstable(feature = "mapped_lock_guards", issue = "117108")] |
| pub use self::mutex::MappedMutexGuard; |
| #[unstable(feature = "nonpoison_mutex", issue = "134645")] |
| pub use self::mutex::{Mutex, MutexGuard}; |
| #[unstable(feature = "mapped_lock_guards", issue = "117108")] |
| pub use self::rwlock::{MappedRwLockReadGuard, MappedRwLockWriteGuard}; |
| #[unstable(feature = "nonpoison_rwlock", issue = "134645")] |
| pub use self::rwlock::{RwLock, RwLockReadGuard, RwLockWriteGuard}; |
| |
| mod condvar; |
| mod mutex; |
| mod rwlock; |