blocking_queue/
blocking_queue.rs

1/// Sample blocking queue use
2use rustpool::BlockingQueue;
3use rustpool::RPQueue;
4
5fn main() {
6    let new_value: isize = 1;
7
8    // create a blocking queue with 3 elements set to value 0
9    let q = BlockingQueue::<isize>::new(3, || 0);
10
11    println!("simple blocking queue size {}", q.capacity());
12
13    // take the first element
14    let v1 = q.take().unwrap();
15
16    println!("first element is {}", v1);
17
18    // remove the remaining items
19    let v2 = q.take().unwrap();
20    let v3 = q.take().unwrap();
21
22    // how many items available now?
23    println!("items in the queue {}", q.available());
24
25    // no more items to return, let's wait at most one second
26    let empty = q.take_wait(std::time::Duration::from_secs(1));
27
28    assert_eq!(None, empty);
29
30    // put everything back
31    q.offer(v1);
32    q.offer(v2);
33    q.offer(v3);
34
35    // how many items available now?
36    println!("items in the queue {}", q.available());
37
38    // we can't add more items than the original capacity
39    q.offer(&new_value);
40
41    // we still have the same number of available items
42    println!("items in the queue {}", q.available());
43}