Spec-Zone.ru › Tokio

Структура OwnedSemaphorePermit

pub struct OwnedSemaphorePermit { /* private fields */ }
Доступно только при включённой функции crate sync.

Владеющее разрешение семафора.

Этот тип создаётся методом acquire_owned.

Реализации

impl OwnedSemaphorePermit

pub fn forget(self)

Забывает разрешение, не возвращая его семафору. Это можно использовать, чтобы уменьшить количество доступных разрешений семафора.

Примеры
use std::sync::Arc;
use tokio::sync::Semaphore;

let sem = Arc::new(Semaphore::new(10));
{
    let permit = sem.clone().try_acquire_many_owned(5).unwrap();
    assert_eq!(sem.available_permits(), 5);
    permit.forget();
}

// Since we forgot the permit, available permits won't go back to its initial value
// even after the permit is dropped.
assert_eq!(sem.available_permits(), 5);

pub fn merge(&mut self, other: Self)

Объединяет два экземпляра OwnedSemaphorePermit, потребляя other, не возвращая удерживаемые им разрешения.

Разрешения, удерживаемые как self, так и other, будут возвращены, когда self будет удалён.

Паника

Эта функция вызывает панику, если объединяются разрешения из разных экземпляров Semaphore.

Примеры
use std::sync::Arc;
use tokio::sync::Semaphore;

let sem = Arc::new(Semaphore::new(10));
let mut permit = sem.clone().try_acquire_owned().unwrap();

for _ in 0..9 {
    let _permit = sem.clone().try_acquire_owned().unwrap();
    // Merge individual permits into a single one.
    permit.merge(_permit)
}

assert_eq!(sem.available_permits(), 0);

// Release all permits in a single batch.
drop(permit);

assert_eq!(sem.available_permits(), 10);

pub fn split(&mut self, n: usize) -> Option<Self>

Отделяет n разрешений от self и возвращает новый экземпляр OwnedSemaphorePermit, удерживающий n разрешений.

Если разрешений недостаточно и уменьшить их количество на n невозможно, возвращает None.

Примечание

Для создания нового экземпляра будет клонирован принадлежащий объект Arc<Semaphore>.

Примеры
use std::sync::Arc;
use tokio::sync::Semaphore;

let sem = Arc::new(Semaphore::new(3));

let mut p1 = sem.try_acquire_many_owned(3).unwrap();
let p2 = p1.split(1).unwrap();

assert_eq!(p1.num_permits(), 2);
assert_eq!(p2.num_permits(), 1);

pub fn semaphore(&self) -> &Arc<Semaphore> ⓘ

Возвращает Semaphore, из которого было получено это разрешение.

pub fn num_permits(&self) -> usize

Возвращает количество разрешений, удерживаемых self.

Реализации трейтов

impl Debug for OwnedSemaphorePermit

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

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

impl Drop for OwnedSemaphorePermit

fn drop(&mut self)

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

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

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

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

impl !RefUnwindSafe for OwnedSemaphorePermit

impl !UnwindSafe for OwnedSemaphorePermit

impl Freeze for OwnedSemaphorePermit

impl Send for OwnedSemaphorePermit

impl Sync for OwnedSemaphorePermit

impl Unpin for OwnedSemaphorePermit

impl UnsafeUnpin for OwnedSemaphorePermit

Реализации для всех типов

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<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.OwnedSemaphorePermit.html

Spec-Zone.ru

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