11 个不稳定版本 (4 个重大更改)
0.13.4 | 2023年9月15日 |
---|---|
0.13.3 | 2023年7月27日 |
0.12.0 | 2023年7月24日 |
0.11.0 | 2022年9月9日 |
0.9.0 | 2020年9月24日 |
#347 在 并发 中
每月 23 次下载
用于 4 个 Crates(直接使用 2 个)
13KB
209 行
信号队列
信号队列是一个互斥锁保护的队列,当新节点被推入队列时可以通知等待的任务/线程。
lib.rs
:
sigq 是一个支持从线程/任务中推入和弹出节点的 FIFO 队列,可以跨越同步/异步边界。与队列交互的接口是一对端点。使用 Pusher
向队列添加数据,使用 Puller
从队列中拉取数据。
Pusher
有一个 push()
方法,用于将新节点推入队列。
Puller
有一个阻塞的 pop()
和一个返回 Future
的 apop()
,用于从队列中获取下一个节点。如果可用,它们将立即返回下一个节点,否则将阻塞并等待将新节点推入队列。可以使用 try_pop()
以非阻塞方式获取下一个节点,如果可用。
let (pusher, puller) = sigq::new();
pusher.push(42).unwrap();
assert_eq!(puller.pop(), Ok(42));
assert_eq!(puller.try_pop(), Ok(None));
语义
- 丢弃最后一个
Pusher
端点将导致等待的Puller
唤醒并返回Err(StaleErr)
,如果队列中没有更多节点。 - 丢弃最后一个
Puller
端点将- 立即丢弃队列中的所有节点。
- 如果尝试向队列中添加新节点,将使
Puller
返回Err(StaleErr)
。
依赖关系
~1.1–6.5MB
~25K SLoC