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::sync::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();
Implementations§
Trait Implementations§
Source§impl Default for RawOneShotRwLock
impl Default for RawOneShotRwLock
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