[−][src]Struct abi_stable::external_types::parking_lot::mutex::RMutex
A mutual exclusion lock that allows dynamic mutable borrows of shared data.
Poisoning
As opposed to the standard library version of this type, this mutex type does not use poisoning, simply unlocking the lock when a panic happens.
Example
use abi_stable::external_types::RMutex; static MUTEX:RMutex<usize>=RMutex::new(0); let guard=std::thread::spawn(||{ for _ in 0..100 { *MUTEX.lock()+=1; } }); for _ in 0..100 { *MUTEX.lock()+=1; } guard.join().unwrap(); assert_eq!(*MUTEX.lock(),200);
Implementations
impl<T> RMutex<T>
[src]
pub const fn new(value: T) -> Self
[src]
Constructs a mutex,wrapping value
.
Example
use abi_stable::external_types::RMutex; static MUTEX:RMutex<Option<String>>=RMutex::new(None); let mutex=RMutex::new(0);
pub fn into_inner(self) -> T
[src]
Unwraps this mutex into its wrapped data.
Example
use abi_stable::external_types::RMutex; let mutex=RMutex::new("hello".to_string()); assert_eq!(mutex.into_inner().as_str(),"hello");
pub fn get_mut(&mut self) -> &mut T
[src]
Gets a mutable reference to its wrapped data.
This does not require any locking,since it takes self
mutably.
Example
use abi_stable::external_types::RMutex; let mut mutex=RMutex::new("Hello".to_string()); mutex.get_mut().push_str(", World!"); assert_eq!(mutex.lock().as_str(),"Hello, World!");
pub fn lock(&self) -> RMutexGuard<'_, T>
[src]
Acquires a mutex,blocking the current thread until it can.
This function returns a guard which releases the mutex when it is dropped.
Trying to lock the mutex in the same thread that holds the lock will cause a deadlock.
Example
use abi_stable::external_types::RMutex; static MUTEX:RMutex<usize>=RMutex::new(0); let guard=std::thread::spawn(|| *MUTEX.lock()+=1 ); *MUTEX.lock()+=4; guard.join().unwrap(); assert_eq!(*MUTEX.lock(),5);
pub fn try_lock(&self) -> ROption<RMutexGuard<'_, T>>
[src]
Attemps to acquire a mutex guard.
Returns the mutex guard if the mutex can be immediately acquired,
otherwise returns RNone
.
Example
use abi_stable::external_types::RMutex; static MUTEX:RMutex<usize>=RMutex::new(0); let mut guard=MUTEX.try_lock().unwrap(); assert!( MUTEX.try_lock().is_none() ); assert_eq!(*guard,0);
pub fn try_lock_for(&self, timeout: RDuration) -> ROption<RMutexGuard<'_, T>>
[src]
Attempts to acquire a mutex guard for the timeout
duration.
Once the timeout is reached,this will return RNone
,
otherwise it will return the mutex guard.
Example
use abi_stable::{ external_types::RMutex, std_types::RDuration, }; static MUTEX:RMutex<usize>=RMutex::new(0); static DUR:RDuration=RDuration::from_millis(4); let mut guard=MUTEX.try_lock_for(DUR).unwrap(); assert!( MUTEX.try_lock_for(DUR).is_none() ); assert_eq!(*guard,0);
Trait Implementations
impl<T> GetStaticEquivalent_ for RMutex<T> where
T: __StableAbi,
[src]
T: __StableAbi,
type StaticEquivalent = _static_RMutex<__GetStaticEquivalent<T>>
impl<T: Send> Send for RMutex<T> where
RawMutex: Send,
[src]
RawMutex: Send,
impl<T> StableAbi for RMutex<T> where
T: __StableAbi,
[src]
T: __StableAbi,
type IsNonZeroType = False
Whether this type has a single invalid bit-pattern. Read more
pub const LAYOUT: &'static TypeLayout
[src]
pub const ABI_CONSTS: AbiConsts
[src]
impl<T: Send> Sync for RMutex<T> where
RawMutex: Sync,
[src]
RawMutex: Sync,
Auto Trait Implementations
impl<T> !RefUnwindSafe for RMutex<T>
impl<T> Unpin for RMutex<T> where
T: Unpin,
T: Unpin,
impl<T> UnwindSafe for RMutex<T> where
T: UnwindSafe,
T: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
pub fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> From<T> for T
[src]
impl<T> GetWithMetadata for T
[src]
type ForSelf = WithMetadata_<T, T>
This is always WithMetadata_<Self, Self>
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> SelfOps for T where
T: ?Sized,
[src]
T: ?Sized,
pub const T: PhantomData<fn() -> Self>
[src]
pub const T_D: PhantomData<Self>
[src]
pub fn assert_ty(self, _other: PhantomData<fn() -> Self>) -> Self
[src]
pub fn assert_ty_ref(&self, _other: PhantomData<fn() -> Self>) -> &Self
[src]
pub fn assert_ty_mut(&mut self, _other: PhantomData<fn() -> Self>) -> &mut Self
[src]
pub fn ty_(&self) -> PhantomData<fn() -> Self>
[src]
pub fn ty_d(&self) -> PhantomData<Self>
[src]
pub fn ty_inv(&self) -> PhantomData<fn(Self) -> Self>
[src]
pub fn ty_inv_ref(&self) -> PhantomData<Cell<&Self>>
[src]
pub fn eq_id(&self, other: &Self) -> bool
[src]
pub fn piped<F, U>(self, f: F) -> U where
F: FnOnce(Self) -> U,
[src]
F: FnOnce(Self) -> U,
pub fn piped_ref<'a, F, U>(&'a self, f: F) -> U where
F: FnOnce(&'a Self) -> U,
[src]
F: FnOnce(&'a Self) -> U,
pub fn piped_mut<'a, F, U>(&'a mut self, f: F) -> U where
F: FnOnce(&'a mut Self) -> U,
[src]
F: FnOnce(&'a mut Self) -> U,
pub fn mutated<F>(self, f: F) -> Self where
F: FnOnce(&mut Self),
[src]
F: FnOnce(&mut Self),
pub fn observe<F>(self, f: F) -> Self where
F: FnOnce(&Self),
[src]
F: FnOnce(&Self),
pub fn into_<T>(self, PhantomData<fn() -> T>) -> T where
Self: Into<T>,
[src]
Self: Into<T>,
pub fn as_ref_<T>(&self) -> &T where
Self: AsRef<T>,
T: ?Sized,
[src]
Self: AsRef<T>,
T: ?Sized,
pub fn as_mut_<T>(&mut self) -> &mut T where
Self: AsMut<T>,
T: ?Sized,
[src]
Self: AsMut<T>,
T: ?Sized,
pub fn drop_(self)
[src]
impl<This> TransmuteElement for This where
This: ?Sized,
[src]
This: ?Sized,
pub unsafe fn transmute_element<T>(self) -> Self::TransmutedPtr where
Self: CanTransmuteElement<T>,
Self::Target: Sized,
[src]
Self: CanTransmuteElement<T>,
Self::Target: Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The error type returned when the conversion fails.
pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<T> TypeIdentity for T where
T: ?Sized,
[src]
T: ?Sized,
type Type = T
The same type as Self. Read more
pub fn into_type_val(self) -> Self::Type where
Self::Type: Sized,
[src]
Self::Type: Sized,
pub fn into_type_ref(&self) -> &Self::Type
[src]
pub fn into_type_mut(&mut self) -> &mut Self::Type
[src]
pub fn into_type_box(self: Box<Self, Global>) -> Box<Self::Type, Global>
[src]
pub fn into_type_arc(this: Arc<Self>) -> Arc<Self::Type>
[src]
pub fn into_type_rc(this: Rc<Self>) -> Rc<Self::Type>
[src]
pub fn from_type_val(this: Self::Type) -> Self where
Self::Type: Sized,
[src]
Self::Type: Sized,