跳到主要内容

OwnedSemaphorePermit

搜索

结构体 OwnedSemaphorePermit 

源代码
pub struct OwnedSemaphorePermit { /* 私有字段 */ }
展开描述

来自信号量的 owned permit。

此类型由 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 而不释放它持有的 permit。

selfother 持有的许将在 self 被 drop 时一起释放。

§恐慌

如果合并来自不同 Semaphore 实例的许可,此函数会发生 panic。

§示例
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>

self 拆分 n 个 permit,并返回一个持有 n 个 permit 的新 OwnedSemaphorePermit 实例。

如果没有足够的许可且无法减少 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>

返回获取此 permit 的 Semaphore

源代码

pub fn num_permits(&self) -> usize

返回 self 持有的许可数。

trait 实现§

源代码§

impl Debug for OwnedSemaphorePermit

源代码§

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

使用给定的格式化器格式化此值。 更多信息
源代码§

impl Drop for OwnedSemaphorePermit

源代码§

fn drop(&mut self)

执行此类型的析构函数。 更多信息

自动 trait 实现§

blanket 实现§

源代码§

impl<T> Any for T
where T: 'static + ?Sized,

源代码§

fn type_id(&self) -> TypeId

Gets the TypeId of self. 更多信息
源代码§

impl<T> Borrow<T> for T
where T: ?Sized,

源代码§

fn borrow(&self) -> &T

Immutably borrows from an owned value. 更多信息
源代码§

impl<T> BorrowMut<T> for T
where T: ?Sized,

源代码§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. 更多信息
源代码§

impl<T> From<T> for T

源代码§

fn from(t: T) -> T

原样返回参数。

源代码§

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>

执行转换。