atomic_queue/
atomic_queue.rs

1/// Sample atomic queue use
2use rustpool::AtomicQueue;
3use rustpool::RPQueue;
4
5fn main() {
6    // create a blocking queue with 3 elements set to value 0
7    let q = AtomicQueue::<isize>::new(3, || 0);
8
9    println!("simple blocking queue size {}", q.capacity());
10
11    // take the first element
12    let v1 = q.take().unwrap();
13
14    println!("first element is {}", v1);
15
16    // remove the remaining items
17    let v2 = q.take().unwrap();
18    let v3 = q.take().unwrap();
19
20    // how many items available now?
21    println!("items in the queue {}", q.available());
22
23    // no more items to return but the atomic queue will never block
24    let empty = q.take_wait(std::time::Duration::from_secs(1));
25
26    assert_eq!(None, empty);
27
28    // put everything back
29    q.offer(v1);
30    q.offer(v2);
31    q.offer(v3);
32
33    // how many items available now?
34    println!("items in the queue {}", q.available());
35
36    let new_value: isize = 1;
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}