Структура Owned RwLock Read Guard
pub struct OwnedRwLockReadGuard<T: ?Sized, U: ?Sized = T> { /* private fields */ }
sync.Владеющая RAII-структура, освобождающая общий доступ для чтения блокировки при удалении.
Эта структура создаётся методом read_owned у RwLock.
Реализации
impl<T: ?Sized, U: ?Sized> OwnedRwLockReadGuard<T, U>
pub fn map<F, V: ?Sized>(this: Self, f: F) -> OwnedRwLockReadGuard<T, V>
Создаёт новый OwnedRwLockReadGuard для компонента заблокированных данных. Эта операция не может завершиться ошибкой, поскольку переданный OwnedRwLockReadGuard уже заблокировал данные.
Это ассоциированная функция, которую нужно вызывать как OwnedRwLockReadGuard::map(...). Метод конфликтовал бы с методами с таким же именем у содержимого заблокированных данных.
Примеры
use std::sync::Arc;
use tokio::sync::{RwLock, OwnedRwLockReadGuard};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
struct Foo(u32);
let lock = Arc::new(RwLock::new(Foo(1)));
let guard = lock.read_owned().await;
let guard = OwnedRwLockReadGuard::map(guard, |f| &f.0);
assert_eq!(1, *guard);pub fn try_map<F, V: ?Sized>( this: Self, f: F, ) -> Result<OwnedRwLockReadGuard<T, V>, Self>
Пытается создать новый OwnedRwLockReadGuard для компонента заблокированных данных. Исходный guard возвращается, если замыкание возвращает None.
Эта операция не может завершиться ошибкой, поскольку переданный OwnedRwLockReadGuard уже заблокировал данные.
Это ассоциированная функция, которую нужно вызывать как OwnedRwLockReadGuard::try_map(..). Метод конфликтовал бы с методами с таким же именем у содержимого заблокированных данных.
Примеры
use std::sync::Arc;
use tokio::sync::{RwLock, OwnedRwLockReadGuard};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
struct Foo(u32);
let lock = Arc::new(RwLock::new(Foo(1)));
let guard = lock.read_owned().await;
let guard = OwnedRwLockReadGuard::try_map(guard, |f| Some(&f.0)).expect("should not fail");
assert_eq!(1, *guard);pub fn rwlock(this: &Self) -> &Arc<RwLock<T>> ⓘ
Возвращает ссылку на исходный Arc<RwLock>.
Примеры
use std::sync::Arc;
use tokio::sync::{RwLock, OwnedRwLockReadGuard};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
struct Foo(u32);
let lock = Arc::new(RwLock::new(Foo(1)));
let guard = lock.clone().read_owned().await;
assert!(Arc::ptr_eq(&lock, OwnedRwLockReadGuard::rwlock(&guard)));
let guard = OwnedRwLockReadGuard::map(guard, |f| &f.0);
assert!(Arc::ptr_eq(&lock, OwnedRwLockReadGuard::rwlock(&guard)));Реализации трейтов
impl<T: ?Sized, U> Debug for OwnedRwLockReadGuard<T, U>
impl<T: ?Sized, U: ?Sized> Deref for OwnedRwLockReadGuard<T, U>
impl<T: ?Sized, U> Display for OwnedRwLockReadGuard<T, U>
impl<T: ?Sized, U: ?Sized> Drop for OwnedRwLockReadGuard<T, U>
impl<T, U> Send for OwnedRwLockReadGuard<T, U>
impl<T, U> Sync for OwnedRwLockReadGuard<T, U>
Автоматические реализации трейтов
impl<T, U = T> !RefUnwindSafe for OwnedRwLockReadGuard<T, U>
impl<T, U = T> !UnwindSafe for OwnedRwLockReadGuard<T, U>
impl<T, U> Freeze for OwnedRwLockReadGuard<T, U>
impl<T, U> Unpin for OwnedRwLockReadGuard<T, U>
impl<T, U> UnsafeUnpin for OwnedRwLockReadGuard<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.OwnedRwLockReadGuard.html