Struct style::shared_lock::SharedRwLock
source · pub struct SharedRwLock {
arc: Arc<RwLock<()>>,
}
Expand description
A shared read/write lock that can protect multiple objects.
In Gecko builds, we don’t need the blocking behavior, just the safety. As such we implement this with an AtomicRefCell instead in Gecko builds, which is ~2x as fast, and panics (rather than deadlocking) when things go wrong (which is much easier to debug on CI).
Servo needs the blocking behavior for its unsynchronized animation setup, but that may not be web-compatible and may need to be changed (at which point Servo could use AtomicRefCell too).
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§
§arc: Arc<RwLock<()>>
Implementations§
sourcepub fn new_leaked() -> Self
pub fn new_leaked() -> Self
Create a new global shared lock (servo).
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 (servo).
sourcepub fn write(&self) -> SharedRwLockWriteGuard<'_>
pub fn write(&self) -> SharedRwLockWriteGuard<'_>
Obtain the lock for writing (servo).
Trait Implementations§
source§fn clone(&self) -> SharedRwLock
fn clone(&self) -> SharedRwLock
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize
fn size_of(&self, ops: &mut MallocSizeOfOps) -> usize
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
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>
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>
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 more