Spec-Zone.ru › Tokio

Структура RwLockMappedWriteGuard

pub struct RwLockMappedWriteGuard<'a, T: ?Sized> { /* private fields */ }
Доступно только при включённой функции crate 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>
where F: FnOnce(&mut T) -> &mut 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>
where F: FnOnce(&mut T) -> Option<&mut U>,

Пытается создать новый 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>
where T: Debug + ?Sized,

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Форматирует значение с помощью указанного форматтера. Подробнее

impl<T: ?Sized> Deref for RwLockMappedWriteGuard<'_, T>

type Target = T

Результирующий тип после разыменования.

fn deref(&self) -> &T

Разыменовывает значение.

impl<T: ?Sized> DerefMut for RwLockMappedWriteGuard<'_, T>

fn deref_mut(&mut self) -> &mut T

Разыменовывает значение с возможностью изменения.

impl<'a, T> Display for RwLockMappedWriteGuard<'a, T>
where T: Display + ?Sized,

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Форматирует значение с помощью указанного форматтера. Подробнее

impl<'a, T: ?Sized> Drop for RwLockMappedWriteGuard<'a, T>

fn drop(&mut self)

Выполняет деструктор для этого типа. Подробнее

fn pin_drop(self: Pin<&mut Self>)

🔬Это экспериментальный API, доступный только в nightly-сборке. (pin_ergonomics)
Выполняет деструктор для этого типа, но, в отличие от Drop::drop, требует, чтобы self был закреплён. Подробнее

impl<T> Send for RwLockMappedWriteGuard<'_, T>
where T: ?Sized + Send + Sync,

impl<T> Sync for RwLockMappedWriteGuard<'_, T>
where T: ?Sized + Send + Sync,

Автоматические реализации трейтов

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> Any for T
where T: 'static + ?Sized,

fn type_id(&self) -> TypeId

Получает TypeId типа self. Подробнее

impl<T> Borrow<T> for T
where T: ?Sized,

fn borrow(&self) -> &T

Неизменяемо заимствует из принадлежащего значения. Подробнее

impl<T> BorrowMut<T> for T
where T: ?Sized,

fn borrow_mut(&mut self) -> &mut T

Изменяемо заимствует из принадлежащего значения. Подробнее

impl<T> From<T> for T

fn from(t: T) -> T

Возвращает аргумент без изменений.

impl<T> Instrument for T

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью предоставленного Span, возвращая обёртку Instrumented. Подробнее

fn in_current_span(self) -> Instrumented<Self> ⓘ

Инструментирует этот тип с помощью текущего Span, возвращая обёртку Instrumented. Подробнее

impl<T, U> Into<U> for T
where U: From<T>,

fn into(self) -> U

Вызывает U::from(self).

То есть это преобразование выполняет действие, выбранное реализацией From<T> for U.

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

type Target = T

🔬Это экспериментальный API, доступный только в nightly. (arbitrary_self_types)
Целевой тип, для которого можно вызвать метод.

impl<T> ToString for T
where T: Display + ?Sized,

fn to_string(&self) -> String

Преобразует заданное значение в String. Подробнее

impl<T, U> TryFrom<U> for T
where U: Into<T>,

type Error = Infallible

Тип, возвращаемый в случае ошибки преобразования.

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Выполняет преобразование.

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

type Error = <U as TryFrom<T>>::Error

Тип, возвращаемый в случае ошибки преобразования.

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Выполняет преобразование.

impl<T> WithSubscriber for T

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Присоединяет предоставленный Subscriber к этому типу и возвращает оболочку WithDispatch. Подробнее

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API