Структура Owned RwLock Mapped Write Guard
pub struct OwnedRwLockMappedWriteGuard<T: ?Sized, U: ?Sized = T> { /* private fields */ }
sync.Владеющая RAII-структура, которая при уничтожении освобождает эксклюзивный доступ к блокировке на запись.
Эта структура создаётся путём отображения OwnedRwLockWriteGuard. Это отдельный тип, отличный от OwnedRwLockWriteGuard, чтобы запретить понижение уровня отображённого охранного объекта, поскольку это может привести к неопределённому поведению.
Реализации
impl<T: ?Sized, U: ?Sized> OwnedRwLockMappedWriteGuard<T, U>
pub fn map<F, V: ?Sized>(this: Self, f: F) -> OwnedRwLockMappedWriteGuard<T, V>
Создаёт новый OwnedRwLockMappedWriteGuard для компонента заблокированных данных.
Эта операция не может завершиться неудачей, поскольку переданный OwnedRwLockMappedWriteGuard уже заблокировал данные.
Это ассоциированная функция, которую необходимо вызывать как OwnedRwLockWriteGuard::map(..). Метод мешал бы одноимённым методам содержимого заблокированных данных.
Примеры
use std::sync::Arc;
use tokio::sync::{RwLock, OwnedRwLockWriteGuard};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
struct Foo(u32);
let lock = Arc::new(RwLock::new(Foo(1)));
{
let lock = Arc::clone(&lock);
let mut mapped = OwnedRwLockWriteGuard::map(lock.write_owned().await, |f| &mut f.0);
*mapped = 2;
}
assert_eq!(Foo(2), *lock.read().await);pub fn try_map<F, V: ?Sized>( this: Self, f: F, ) -> Result<OwnedRwLockMappedWriteGuard<T, V>, Self>
Пытается создать новый OwnedRwLockMappedWriteGuard для компонента заблокированных данных. Если замыкание возвращает None, возвращается исходный охранный объект.
Эта операция не может завершиться неудачей, поскольку переданный OwnedRwLockMappedWriteGuard уже заблокировал данные.
Это ассоциированная функция, которую необходимо вызывать как OwnedRwLockMappedWriteGuard::try_map(...). Метод мешал бы одноимённым методам содержимого заблокированных данных.
Примеры
use std::sync::Arc;
use tokio::sync::{RwLock, OwnedRwLockWriteGuard};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
struct Foo(u32);
let lock = Arc::new(RwLock::new(Foo(1)));
{
let guard = Arc::clone(&lock).write_owned().await;
let mut guard = OwnedRwLockWriteGuard::try_map(guard, |f| Some(&mut f.0)).expect("should not fail");
*guard = 2;
}
assert_eq!(Foo(2), *lock.read().await);pub fn rwlock(this: &Self) -> &Arc<RwLock<T>> ⓘ
Возвращает ссылку на исходный Arc<RwLock>.
Примеры
use std::sync::Arc;
use tokio::sync::{
RwLock,
OwnedRwLockWriteGuard,
OwnedRwLockMappedWriteGuard,
};
let lock = Arc::new(RwLock::new(1));
let guard = lock.clone().write_owned().await;
let guard = OwnedRwLockWriteGuard::map(guard, |x| x);
assert!(Arc::ptr_eq(&lock, OwnedRwLockMappedWriteGuard::rwlock(&guard)));Реализации трейтов
impl<T: ?Sized, U> Debug for OwnedRwLockMappedWriteGuard<T, U>
impl<T: ?Sized, U: ?Sized> Deref for OwnedRwLockMappedWriteGuard<T, U>
impl<T: ?Sized, U: ?Sized> DerefMut for OwnedRwLockMappedWriteGuard<T, U>
impl<T: ?Sized, U: ?Sized> Drop for OwnedRwLockMappedWriteGuard<T, U>
impl<T, U> Send for OwnedRwLockMappedWriteGuard<T, U>
impl<T, U> Sync for OwnedRwLockMappedWriteGuard<T, U>
Автоматические реализации трейтов
impl<T, U = T> !RefUnwindSafe for OwnedRwLockMappedWriteGuard<T, U>
impl<T, U = T> !UnwindSafe for OwnedRwLockMappedWriteGuard<T, U>
impl<T, U> Freeze for OwnedRwLockMappedWriteGuard<T, U>
impl<T, U> Unpin for OwnedRwLockMappedWriteGuard<T, U>
impl<T, U> UnsafeUnpin for OwnedRwLockMappedWriteGuard<T, U>
Обобщённые реализации
impl<T> BorrowMut<T> for Twhere T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> Instrument for T
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
impl<P, T> Receiver for P
type Target = T
arbitrary_self_types)
impl<T> ToString for T
impl<T> WithSubscriber for T
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Subscriber к этому типу и возвращает обёртку WithDispatch. Подробнее
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/sync/struct.OwnedRwLockMappedWriteGuard.html