pub struct OwnedSemaphorePermit { /* private fields */ }展开描述
来自 semaphore 的 owned permit。
此类型
由
方法
创建。acquire_owned
实现§
Source§impl OwnedSemaphorePermit
impl OwnedSemaphorePermit
Sourcepub 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);Sourcepub fn merge(&mut self, other: Self)
pub fn merge(&mut self, other: Self)
将两个 OwnedSemaphorePermit 实例合并在一起,消耗 other 而不释放其持有的许可证。
self 和 other 持有的许可证都会在 self 丢弃时释放。
§Panics
如果合并来自不同 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);Sourcepub fn split(&mut self, n: usize) -> Option<Self>
pub fn split(&mut self, n: usize) -> Option<Self>
从 self 中拆分 n 个许可证,并返回持有 n 个许可证的新 OwnedSemaphorePermit 实例。
如果没有足够的许可证且无法减少 n,则返回 None。
§Note
它会克隆拥有的 Arc
§示例
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);Sourcepub fn num_permits(&self) -> usize
pub fn num_permits(&self) -> usize
返回 self 持有的许可证数量。
Trait 实现§
Source§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 实现§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. 更多信息