1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
/// # Simple Buffer Usage Example /// ``` /// use coalescing_buffer::simple::create_buf; /// use std::thread; /// use std::sync::Arc; /// /// fn main(){ /// let (sx, rx) = create_buf::<i32>(); /// /// let sx = Arc::new(sx); /// let sx1 = sx.clone(); /// /// let producer0 = thread::spawn(move || { /// for i in 0..10000000 { /// sx.offer(i); /// } /// sx.offer(-1); /// }); /// /// let producer1 = thread::spawn(move || { /// for i in 0..10000000 { /// sx1.offer(i); /// } /// sx1.offer(-1); /// }); /// /// let consumer = thread::spawn(move || loop { /// if let Some(ref value) = rx.poll() { /// if *value == -1 { /// break; /// } /// } /// }); /// /// let _ = producer0.join(); /// let _ = producer1.join(); /// let _ = consumer.join(); /// /// } /// ``` /// /// # Ring buffer usage /// /// ``` /// use coalescing_buffer::ring::*; /// use std::thread; /// /// const POISON_PILL: i32 = -1; /// /// /// fn main() { /// let (sender, receiver) = new_ring_buffer(32); /// let producer = thread::spawn(move || producer_task(sender)); /// let consumer = thread::spawn(move || consumer_task(receiver)); /// /// let producer_overflow = producer.join().unwrap(); /// consumer.join(); /// assert!(!producer_overflow, "ring simple has overflowed"); /// } /// /// fn producer_task(sender: Sender<i32, i32>) -> bool { /// for run in 0..100000 { /// for message in 0..10 { /// let success = sender.offer(message, run * 10 + message); /// if !success { /// sender.offer_value_only(POISON_PILL); /// return true; /// } /// } /// } /// sender.offer_value_only(POISON_PILL); /// return false; /// } /// /// fn consumer_task(receiver: Receiver<i32, i32>) { /// loop { /// let values = receiver.poll(100); /// if values.contains(&POISON_PILL) { /// return; /// } /// } /// } /// ``` /// pub mod simple; pub mod ring;