pub struct ReadOptimizedLock<T> { /* private fields */ }Expand description
A mutex lock optimized for low-contention read access. The RwLock type in the standard library allows multiple readers to make progress concurrently, but scalability is limited if these read-only critical sections are small because acquiring a read-side lock still requires a read-modify-write atomic operation.
This crate uses RCU techniques from the ArcSwap crate to avoid expensive atomic operations when acquiring a shared lock. The downside is that acquiring a write lock is a good deal more expensive. The intent here is to use it for parallel egglog where write-side critical sections are fairly large and uncontended, but we need high scalability for read-only operations.
Implementations§
Source§impl<T> ReadOptimizedLock<T>
 
impl<T> ReadOptimizedLock<T>
pub fn new(data: T) -> Self
Sourcepub fn into_inner(self) -> T
 
pub fn into_inner(self) -> T
Extract the inner data from the lock.
Sourcepub fn as_mut_ref(&mut self) -> &mut T
 
pub fn as_mut_ref(&mut self) -> &mut T
Get mutable access to the underlying data. This operation does no synchronization as the mutable receiver guarantees exclusive access for safe code.
Sourcepub fn read(&self) -> MutexReader<'_, T>
 
pub fn read(&self) -> MutexReader<'_, T>
Create a Reader object that grants read access to the data.
This method will block for any ongoing writes to complete.