Структура Semaphore Permit
pub struct SemaphorePermit<'a> { /* private fields */ }
sync.Разрешение, полученное от семафора.
Этот тип создаётся методом acquire.
Реализации
impl<'a> SemaphorePermit<'a>
pub fn forget(self)
Забывает разрешение, не возвращая его семафору. Это можно использовать, чтобы уменьшить количество доступных разрешений семафора.
Примеры
use std::sync::Arc;
use tokio::sync::Semaphore;
let sem = Arc::new(Semaphore::new(10));
{
let permit = sem.try_acquire_many(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)
Объединяет два экземпляра SemaphorePermit, потребляя other, не освобождая удерживаемые им разрешения.
Разрешения, удерживаемые как self, так и other, освобождаются при удалении self.
Панические сбои
Эта функция вызывает панику, если объединяются разрешения из разных экземпляров Semaphore.
Примеры
use std::sync::Arc;
use tokio::sync::Semaphore;
let sem = Arc::new(Semaphore::new(10));
let mut permit = sem.try_acquire().unwrap();
for _ in 0..9 {
let _permit = sem.try_acquire().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 и возвращает новый экземпляр SemaphorePermit, содержащий n разрешений.
Если разрешений недостаточно и уменьшить их количество на n невозможно, возвращает None.
Примеры
use std::sync::Arc;
use tokio::sync::Semaphore;
let sem = Arc::new(Semaphore::new(3));
let mut p1 = sem.try_acquire_many(3).unwrap();
let p2 = p1.split(1).unwrap();
assert_eq!(p1.num_permits(), 2);
assert_eq!(p2.num_permits(), 1);pub fn num_permits(&self) -> usize
Возвращает количество разрешений, удерживаемых self.
Реализации трейтов
impl<'a> Debug for SemaphorePermit<'a>
impl Drop for SemaphorePermit<'_>
Автоматические реализации трейтов
impl<'a> !RefUnwindSafe for SemaphorePermit<'a>
impl<'a> !UnwindSafe for SemaphorePermit<'a>
impl<'a> Freeze for SemaphorePermit<'a>
impl<'a> Send for SemaphorePermit<'a>
impl<'a> Sync for SemaphorePermit<'a>
impl<'a> Unpin for SemaphorePermit<'a>
impl<'a> UnsafeUnpin for SemaphorePermit<'a>
Общие реализации
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> ⓘ
MIT License
Copyright © Tokio Contributors
https://docs.rs/tokio/1.53.1/tokio/sync/struct.SemaphorePermit.html