pub struct SemaphorePermit<'a> { /* 私有字段 */ }展开描述
来自信号量的 permit。
此类型由 acquire 方法创建。
实现§
源代码§impl<'a> SemaphorePermit<'a>
impl<'a> SemaphorePermit<'a>
源代码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.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)
pub fn merge(&mut self, other: Self)
将两个 SemaphorePermit 实例合并在一起,消费 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.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>
pub fn split(&mut self, n: usize) -> Option<Self>
从 self 拆分 n 个 permit,并返回持有 n 个 permit 的新 SemaphorePermit 实例。
如果没有足够的许可且无法减少 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
pub fn num_permits(&self) -> usize
返回 self 持有的许可数。
trait 实现§
源代码§impl<'a> Debug for SemaphorePermit<'a>
impl<'a> Debug for SemaphorePermit<'a>
自动 trait 实现§
impl<'a> Freeze for SemaphorePermit<'a>
impl<'a> RefUnwindSafe 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<'a> UnwindSafe for SemaphorePermit<'a>
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. 更多信息