Semaphore
信号量维护一组许可。许可用于同步对共享资源的访问。
许可个数在初始化时指定。
pub fn new(permits: usize) -> Self
当获取许可并且信号量具有剩余的许可时,该函数立即返回许可。但是,如果没有剩余的许可证可用,则将等待,直到有释放的许可证被分配给申请者。
常用于精准的控制正在运行的任务最大数量。
依赖
仅在 feature=“sync” 时支持
与Mutex区别
可以允许一个以上的并发调用方同时访问共享资源。
例子
// tokio : buffer 一次可以传输的请求数
pub fn channel<T>(buffer: usize) -> (Sender<T>, Receiver<T>) {
assert!(buffer > 0, "mpsc bounded channel requires buffer > 0");
let semaphore = (semaphore::Semaphore::new(buffer), buffer);
let (tx, rx) = chan::channel(semaphore);
let tx = Sender::new(tx);
let rx = Receiver::new(rx);
(tx, rx)
}