pub struct RawOneShotRwLock { /* private fields */ }
Expand description
A one-shot readers-writer lock that panics instead of (dead)locking on contention.
This lock allows no contention and panics on lock_shared
, lock_exclusive
, lock_upgradable
, and upgrade
if it is already locked conflictingly.
This is useful in situations where contention would be a bug,
such as in single-threaded programs that would deadlock on contention.
§Examples
use one_shot_mutex::OneShotRwLock;
static X: OneShotRwLock<i32> = OneShotRwLock::new(42);
// This is equivalent to `X.try_write().unwrap()`.
let x = X.write();
// This panics instead of deadlocking.
// let x2 = X.write();
// Once we unlock the mutex, we can lock it again.
drop(x);
let x = X.write();
Trait Implementations§
Source§impl RawRwLock for RawOneShotRwLock
impl RawRwLock for RawOneShotRwLock
Source§type GuardMarker = GuardSend
type GuardMarker = GuardSend
Marker type which determines whether a lock guard should be
Send
. Use
one of the GuardSend
or GuardNoSend
helper types here.Acquires a shared lock, blocking the current thread until it is able to do so.
Attempts to acquire a shared lock without blocking.
Releases a shared lock. Read more
Source§fn lock_exclusive(&self)
fn lock_exclusive(&self)
Acquires an exclusive lock, blocking the current thread until it is able to do so.
Source§fn try_lock_exclusive(&self) -> bool
fn try_lock_exclusive(&self) -> bool
Attempts to acquire an exclusive lock without blocking.
Source§unsafe fn unlock_exclusive(&self)
unsafe fn unlock_exclusive(&self)
Releases an exclusive lock. Read more
Source§fn is_locked_exclusive(&self) -> bool
fn is_locked_exclusive(&self) -> bool
Check if this
RwLock
is currently exclusively locked.Source§impl RawRwLockRecursive for RawOneShotRwLock
impl RawRwLockRecursive for RawOneShotRwLock
Acquires a shared lock without deadlocking in case of a recursive lock.
Attempts to acquire a shared lock without deadlocking in case of a recursive lock.
Source§impl RawRwLockUpgrade for RawOneShotRwLock
impl RawRwLockUpgrade for RawOneShotRwLock
Source§fn lock_upgradable(&self)
fn lock_upgradable(&self)
Acquires an upgradable lock, blocking the current thread until it is able to do so.
Source§fn try_lock_upgradable(&self) -> bool
fn try_lock_upgradable(&self) -> bool
Attempts to acquire an upgradable lock without blocking.
Source§unsafe fn unlock_upgradable(&self)
unsafe fn unlock_upgradable(&self)
Releases an upgradable lock. Read more
Source§unsafe fn try_upgrade(&self) -> bool
unsafe fn try_upgrade(&self) -> bool
Attempts to upgrade an upgradable lock to an exclusive lock without
blocking. Read more
Source§impl RawRwLockUpgradeDowngrade for RawOneShotRwLock
impl RawRwLockUpgradeDowngrade for RawOneShotRwLock
Source§unsafe fn downgrade_upgradable(&self)
unsafe fn downgrade_upgradable(&self)
Downgrades an upgradable lock to a shared lock. Read more
Source§unsafe fn downgrade_to_upgradable(&self)
unsafe fn downgrade_to_upgradable(&self)
Downgrades an exclusive lock to an upgradable lock. Read more
Auto Trait Implementations§
impl !Freeze for RawOneShotRwLock
impl RefUnwindSafe for RawOneShotRwLock
impl Send for RawOneShotRwLock
impl Sync for RawOneShotRwLock
impl Unpin for RawOneShotRwLock
impl UnwindSafe for RawOneShotRwLock
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more