pub struct SharedRwLock {
cell: Option<Arc<AtomicRefCell<SomethingZeroSizedButTyped>>>,
}Expand description
A shared read/write lock that can protect multiple objects.
We don’t need the blocking behavior, just the safety. As such we implement this with an AtomicRefCell, which is ~2x as fast as an RwLock, and panics (rather than deadlocking) when things go wrong (which is much easier to debug on CI).
Gecko also needs the ability to have “read only” SharedRwLocks, which are used for objects stored in (read only) shared memory. Attempting to acquire write access to objects protected by a read only SharedRwLock will panic.
Fields§
§cell: Option<Arc<AtomicRefCell<SomethingZeroSizedButTyped>>>Implementations§
Sourcepub fn new_leaked() -> Self
pub fn new_leaked() -> Self
Create a new global shared lock.
fn ptr(&self) -> *const SomethingZeroSizedButTyped
Sourcepub fn wrap<T>(&self, data: T) -> Locked<T>
pub fn wrap<T>(&self, data: T) -> Locked<T>
Wrap the given data to make its access protected by this lock.
Sourcepub fn read(&self) -> SharedRwLockReadGuard<'_>
pub fn read(&self) -> SharedRwLockReadGuard<'_>
Obtain the lock for reading.
Sourcepub fn write(&self) -> SharedRwLockWriteGuard<'_>
pub fn write(&self) -> SharedRwLockWriteGuard<'_>
Obtain the lock for writing.
Trait Implementations§
Source§fn clone(&self) -> SharedRwLock
fn clone(&self) -> SharedRwLock
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§fn size_of(&self, _: &mut MallocSizeOfOps) -> usize
fn size_of(&self, _: &mut MallocSizeOfOps) -> usize
Measure the heap usage of all descendant heap-allocated structures, but
not the space taken up by the value itself.
Auto Trait Implementations§
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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> MaybeBoxed<Box<T>> for T
impl<T> MaybeBoxed<Box<T>> for T
Source§fn maybe_boxed(self) -> Box<T>
fn maybe_boxed(self) -> Box<T>
Convert
Source§impl<T> MaybeBoxed<T> for T
impl<T> MaybeBoxed<T> for T
Source§fn maybe_boxed(self) -> T
fn maybe_boxed(self) -> T
Convert