Структура RwLock Mapped Write Guard
pub struct RwLockMappedWriteGuard<'a, T: ?Sized> { /* private fields */ }
sync.Структура RAII, используемая для освобождения эксклюзивного доступа к записи в блокировке при удалении.
Эта структура создаётся путём отображения RwLockWriteGuard. Это отдельный тип, отличный от RwLockWriteGuard, чтобы запретить понижение уровня доступа у отображённого guard, поскольку это может привести к неопределённому поведению.
Реализации
impl<'a, T: ?Sized> RwLockMappedWriteGuard<'a, T>
pub fn map<F, U: ?Sized>(this: Self, f: F) -> RwLockMappedWriteGuard<'a, U>
Создаёт новый RwLockMappedWriteGuard для компонента заблокированных данных.
Эта операция не может завершиться неудачей, поскольку переданный RwLockMappedWriteGuard уже заблокировал данные.
Это ассоциированная функция, которую необходимо использовать как RwLockMappedWriteGuard::map(..). Метод с таким же именем конфликтовал бы с методами содержимого заблокированных данных.
Это асинхронная версия RwLockWriteGuard::map из crate parking_lot.
Примеры
use tokio::sync::{RwLock, RwLockWriteGuard};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
struct Foo(u32);
let lock = RwLock::new(Foo(1));
{
let mut mapped = RwLockWriteGuard::map(lock.write().await, |f| &mut f.0);
*mapped = 2;
}
assert_eq!(Foo(2), *lock.read().await);pub fn try_map<F, U: ?Sized>( this: Self, f: F, ) -> Result<RwLockMappedWriteGuard<'a, U>, Self>
Пытается создать новый RwLockMappedWriteGuard для компонента заблокированных данных. Исходный guard возвращается, если замыкание возвращает None.
Эта операция не может завершиться неудачей, поскольку переданный RwLockMappedWriteGuard уже заблокировал данные.
Это ассоциированная функция, которую необходимо использовать как RwLockMappedWriteGuard::try_map(...). Метод с таким же именем конфликтовал бы с методами содержимого заблокированных данных.
Это асинхронная версия RwLockWriteGuard::try_map из crate parking_lot.
Примеры
use tokio::sync::{RwLock, RwLockWriteGuard};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
struct Foo(u32);
let lock = RwLock::new(Foo(1));
{
let guard = lock.write().await;
let mut guard = RwLockWriteGuard::try_map(guard, |f| Some(&mut f.0)).expect("should not fail");
*guard = 2;
}
assert_eq!(Foo(2), *lock.read().await);Реализации трейтов
impl<'a, T> Debug for RwLockMappedWriteGuard<'a, T>
impl<T: ?Sized> Deref for RwLockMappedWriteGuard<'_, T>
impl<T: ?Sized> DerefMut for RwLockMappedWriteGuard<'_, T>
impl<'a, T> Display for RwLockMappedWriteGuard<'a, T>
impl<'a, T: ?Sized> Drop for RwLockMappedWriteGuard<'a, T>
impl<T> Send for RwLockMappedWriteGuard<'_, T>
impl<T> Sync for RwLockMappedWriteGuard<'_, T>
Автоматические реализации трейтов
impl<'a, T> !RefUnwindSafe for RwLockMappedWriteGuard<'a, T>
impl<'a, T> !UnwindSafe for RwLockMappedWriteGuard<'a, T>
impl<'a, T> Freeze for RwLockMappedWriteGuard<'a, T>where T: ?Sized,
impl<'a, T> Unpin for RwLockMappedWriteGuard<'a, T>where T: ?Sized,
impl<'a, T> UnsafeUnpin for RwLockMappedWriteGuard<'a, T>where T: ?Sized,
Обобщённые реализации
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.RwLockMappedWriteGuard.html