Структура Owned Semaphore Permit
pub struct OwnedSemaphorePermit { /* private fields */ }
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
impl Drop for OwnedSemaphorePermit
Автоматические реализации трейтов
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> 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<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.OwnedSemaphorePermit.html