pub struct OwnedSemaphorePermit { /* 私有字段 */ }展开描述
来自信号量的 owned permit。
此类型由 acquire_owned 方法创建。
实现§
源代码§impl OwnedSemaphorePermit
impl OwnedSemaphorePermit
源代码pub fn forget(self)
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)
pub fn merge(&mut self, other: Self)
将两个 OwnedSemaphorePermit 实例合并在一起,消费 other 而不释放它持有的 permit。
由 self 和 other 持有的许将在 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>
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 num_permits(&self) -> usize
pub fn num_permits(&self) -> usize
返回 self 持有的许可数。
trait 实现§
源代码§impl Debug for OwnedSemaphorePermit
impl Debug for OwnedSemaphorePermit
自动 trait 实现§
impl Freeze for OwnedSemaphorePermit
impl RefUnwindSafe for OwnedSemaphorePermit
impl Send for OwnedSemaphorePermit
impl Sync for OwnedSemaphorePermit
impl Unpin for OwnedSemaphorePermit
impl UnsafeUnpin for OwnedSemaphorePermit
impl UnwindSafe for OwnedSemaphorePermit
blanket 实现§
源代码§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
源代码§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. 更多信息