2 个不稳定版本
0.2.1 | 2023 年 1 月 3 日 |
---|---|
0.2.0 |
|
0.1.5 | 2022 年 3 月 27 日 |
905 在 并发
每月 下载 28 次
40KB
479 行
bombs
高效的单生产者多消费者通道类型。
有关详细信息,请参阅 crate 文档。
lib.rs
:
Bombs,一大堆。
此 crate 提供单生产者多消费者通道类型,其中 Fuse
是生产者,而 Bomb
是消费者。
Fuse
/Bomb
只能使用一次,而 MultiFuse
/MultiBomb
可以重复使用,并在队列中存储通过通道发送的值。
对于非阻塞通道,请参阅 crate 级别类型。对于阻塞通道,请参阅 blocking
模块中的类型。
示例
如果您想向不同的线程发送“关闭程序”信号,以便每个线程在关闭之前都需要先清理,则可以向每个线程提供一个 Bomb<()>
,并在爆炸后运行清理代码。
注意:此示例假设您的线程已经在某个事件循环中运行逻辑。建议使用 blocking
变体,而不是在循环中检查 exploded()
。
use std::thread;
use bombs::blocking::Bomb;
// Create a new fuse and bomb pair.
let (fuse, bomb) = Bomb::new();
// Clone `bomb` into thread.
let bomb_clone = bomb.clone();
thread::spawn(move || {
loop {
// Do some stuff...
if let Some(_) = bomb_clone.exploded() {
// Received close signal, break.
// Clean up data values...
break;
}
}
});
// Create another thread.
// Move original `bomb` into thread.
thread::spawn(move || {
loop {
// Do some other stuff...
if let Some(_) = bomb.exploded() {
// Received close signal, break.
// Clean up data values...
break;
}
}
});
// Do some different stuff...
// Send close signal.
let flame = fuse.light(());
// Wait for all inner threads to close safely (checked by `Bomb` drop).
flame.wait_for_extinguish();
// Now safely quit the program.
依赖关系
~0–26MB
~330K SLoC