Crate magnetic [] [src]

Magnetic contains a set of high-performance queues useful for developing low-latency applications. All queues are FIFO unless otherwise specified.

Examples

use std::thread::spawn;
use magnetic::spsc::spsc_queue;
use magnetic::buffer::dynamic::DynamicBuffer;
use magnetic::{Producer, Consumer};

let (p, c) = spsc_queue(DynamicBuffer::new(32).unwrap());

// Push and pop within a single thread
p.push(1);
assert_eq!(c.pop(), 1);

// Push and pop from multiple threads. Since this example is using the
// SPSC queue, only one producer and one consumer are allowed.
let t1 = spawn(move || {
    for i in 0..10 {
        println!("Producing {}", i);
        p.push(i);
    }
});

let t2 = spawn(move || {
    loop {
        let i = c.pop();
        println!("Consumed {}", i);
        if i == 9 { break; }
    }
});

t1.join().unwrap();
t2.join().unwrap();

Modules

buffer

Memory buffer API

mpmc

Multiple-producer multiple-consumer queue

mpsc

Multiple-producer single-consumer queue

spmc

Single-producer multiple-consumer queue

spsc

Single-producer single-consumer queue

Traits

Consumer

The consumer end of the queue allows for receiving data. Consumer<T> is always Send, but is only Sync for multi-consumer (SPMC, MPMC) queues.

Producer

The consumer end of the queue allows for sending data. Producer<T> is always Send, but is only Sync for multi-producer (MPSC, MPMC) queues.