pub struct SegQueue<T> { /* private fields */ }Expand description
An unbounded multi-producer multi-consumer queue.
This queue is implemented as a linked list of segments, where each segment is a small buffer
that can hold a handful of elements. There is no limit to how many elements can be in the queue
at a time. However, since segments need to be dynamically allocated as elements get pushed,
this queue is somewhat slower than ArrayQueue.
§Examples
use crossbeam_queue::SegQueue;
let q = SegQueue::new();
q.push('a');
q.push('b');
assert_eq!(q.pop(), Some('a'));
assert_eq!(q.pop(), Some('b'));
assert!(q.pop().is_none());Implementations§
Source§impl<T> SegQueue<T>
impl<T> SegQueue<T>
Sourcepub const fn new() -> SegQueue<T>
pub const fn new() -> SegQueue<T>
Creates a new unbounded queue.
§Examples
use crossbeam_queue::SegQueue;
let q = SegQueue::<i32>::new();Sourcepub fn push(&self, value: T)
pub fn push(&self, value: T)
Pushes back an element to the tail.
§Examples
use crossbeam_queue::SegQueue;
let q = SegQueue::new();
q.push(10);
q.push(20);Sourcepub fn push_mut(&mut self, value: T)
pub fn push_mut(&mut self, value: T)
Pushes an element to the queue with exclusive mutable access.
Avoids atomic operations and synchronization, assuming no other threads access the queue concurrently.
§Examples
use crossbeam_queue::SegQueue;
let mut q = SegQueue::new();
q.push_mut(10);
q.push_mut(20);Sourcepub fn pop(&self) -> Option<T>
pub fn pop(&self) -> Option<T>
Pops the head element from the queue.
If the queue is empty, None is returned.
§Examples
use crossbeam_queue::SegQueue;
let q = SegQueue::new();
q.push(10);
q.push(20);
assert_eq!(q.pop(), Some(10));
assert_eq!(q.pop(), Some(20));
assert!(q.pop().is_none());Sourcepub fn pop_mut(&mut self) -> Option<T>
pub fn pop_mut(&mut self) -> Option<T>
Pops the head element from the queue using an exclusive reference.
Avoids atomic operations and synchronization, assuming no other threads access the queue concurrently.
If the queue is empty, None is returned.
§Examples
use crossbeam_queue::SegQueue;
let mut q = SegQueue::new();
q.push(10);
q.push(20);
assert_eq!(q.pop_mut(), Some(10));
assert_eq!(q.pop_mut(), Some(20));
assert!(q.pop_mut().is_none());