2 个不稳定版本
使用旧 Rust 2015
0.2.0 | 2017年12月23日 |
---|---|
0.1.0 | 2017年12月9日 |
#1168 in 并发
每月下载 46 次
在 2 crates 中使用
31KB
458 行
DelayQueue for Rust
一个并发无界阻塞队列,其中每个元素只能在其延迟到期时被移除。
示例
extern crate delay_queue;
use std::time::{Duration, Instant};
use std::thread;
use delay_queue::{Delay, DelayQueue};
fn main() {
let queue: DelayQueue<Delay<&str>> = DelayQueue::new();
// Clone the queue and move it to the consumer thread
let mut consumer_queue = queue.clone();
let consumer_handle = thread::spawn(move || {
// The pop() will block until an item is available and its delay has expired
println!("First pop: {}", consumer_queue.pop().value);
println!("Second pop: {}", consumer_queue.pop().value);
});
// Clone the queue and move it to the producer thread
let mut producer_queue = queue.clone();
let producer_handle = thread::spawn(move || {
// This item can only be popped after 3 seconds have passed
producer_queue.push(Delay::for_duration("3s", Duration::from_secs(3)));
// This item can be popped immediately
producer_queue.push(Delay::until_instant("now", Instant::now()));
});
consumer_handle.join().unwrap();
producer_handle.join().unwrap();
assert!(queue.is_empty());
}
您可以使用以下命令运行此示例: cargo run --example basic_usage
许可协议
许可协议为以下之一:
- Apache License,版本 2.0,(LICENSE-APACHE 或 http://www.apache.org/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 http://opensource.org/licenses/MIT)
任选其一。
贡献
除非您明确声明,否则您根据 Apache-2.0 许可证定义提交的任何有意贡献的内容,都将根据上述条款双许可,不附加任何额外条款或条件。