pub struct ReadGuard<'a, T: Sized> { /* private fields */ }
Implementations§
Source§impl<'a, T> ReadGuard<'a, T>
impl<'a, T> ReadGuard<'a, T>
Sourcepub fn try_to_write(self) -> LockResult<WriteGuard<'a, T>>
pub fn try_to_write(self) -> LockResult<WriteGuard<'a, T>>
Same as Self::to_write but instead of blocking thread, if a lock can not be obtained when called a LockError::WouldBlock is returned
Sourcepub fn to_write(self) -> LockResult<WriteGuard<'a, T>>
pub fn to_write(self) -> LockResult<WriteGuard<'a, T>>
use manual_rwlock::MrwLock;
let mrw_lock = MrwLock::new(10);
let read = mrw_lock.read().unwrap();
let mut write = read.to_write().unwrap();
*write = 5;
let read = write.to_read();
assert_eq!(*read, 5)
Sourcepub unsafe fn early_release(&self)
pub unsafe fn early_release(&self)
Releases lock without dropping object. This can allow for a write lock to obtained and do some work after which the lock must be reobtained
§Safety
Do not access contents before reobtaining lock with either reobtain or try_reobtain
§Examples
use manual_rwlock::MrwLock;
let rwlock = MrwLock::new(5);
let read_rw = rwlock.read().unwrap();
unsafe { read_rw.early_release() };
{
let mut write = rwlock.write().unwrap();
*write += 5;
}
unsafe { read_rw.reobtain().unwrap() };
assert_eq!(*read_rw, 10);
Trait Implementations§
Source§impl<'a, T> Clone for ReadGuard<'a, T>
use manual_rwlock::MrwLock;
let rwlock = MrwLock::new(5);
let read = rwlock.read().unwrap();
let read2 = read.clone();
assert_eq!(*read2, 5);
impl<'a, T> Clone for ReadGuard<'a, T>
use manual_rwlock::MrwLock;
let rwlock = MrwLock::new(5);
let read = rwlock.read().unwrap();
let read2 = read.clone();
assert_eq!(*read2, 5);
impl<'a, T> Send for ReadGuard<'a, T>
impl<'a, T> Sync for ReadGuard<'a, T>
Auto Trait Implementations§
impl<'a, T> Freeze for ReadGuard<'a, T>
impl<'a, T> RefUnwindSafe for ReadGuard<'a, T>where
T: RefUnwindSafe,
impl<'a, T> Unpin for ReadGuard<'a, T>
impl<'a, T> UnwindSafe for ReadGuard<'a, T>where
T: RefUnwindSafe,
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