Spec-Zone.ru › Tokio

Структура OwnedRwLockMappedWriteGuard

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

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

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

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

impl<T: ?Sized, U: ?Sized> Deref for OwnedRwLockMappedWriteGuard<T, U>

type Target = U

Тип, получаемый в результате разыменования.

fn deref(&self) -> &U

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

impl<T: ?Sized, U: ?Sized> DerefMut for OwnedRwLockMappedWriteGuard<T, U>

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

Изменяемо разыменовывает значение.

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

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

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

impl<T: ?Sized, U: ?Sized> Drop for OwnedRwLockMappedWriteGuard<T, U>

fn drop(&mut self)

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

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

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

impl<T, U> Send for OwnedRwLockMappedWriteGuard<T, U>
where T: ?Sized + Send + Sync, U: ?Sized + Send + Sync,

impl<T, U> Sync for OwnedRwLockMappedWriteGuard<T, U>
where T: ?Sized + Send + Sync, U: ?Sized + Send + Sync,

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

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>
where T: ?Sized, U: ?Sized,

impl<T, U> Unpin for OwnedRwLockMappedWriteGuard<T, U>
where T: Unpin + ?Sized, U: ?Sized,

impl<T, U> UnsafeUnpin for OwnedRwLockMappedWriteGuard<T, U>
where T: ?Sized, U: ?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.OwnedRwLockMappedWriteGuard.html

Spec-Zone.ru

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