Module coalescing_buffer::ring
[−]
[src]
Coalescing ring buffer is a circular buffer of key and value pair(like a map). A update with same key will replace the value if the value is not yet read
extern crate coalescing_buffer; use coalescing_buffer::ring::*; use std::thread; const POISON_PILL: i32 = -1; fn main() { let (sender, receiver) = new_ring_buffer(25); // This will be changed to 32 nearest 2^x 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; } } }
Structs
Receiver | |
Sender |
Functions
new_ring_buffer |
Creates a ring buffer and provides a sender(to produce) and a receiver(consumer) to send/receive data of the buffer. Sender and Receiver can only be access by one thread |