pub struct Queue<T> { /* private fields */ }
Expand description
Atomic queue cloned from https://github.com/max0x7ba/atomic_queue
Should be:
- Lock-free
Any type can be pushed into the queue, but it’s recommended to use some sort of smart pointer that can be free-ed outside of the critical path.
Uses unsafe internally.
Implementations§
Source§impl<T> Queue<T>
impl<T> Queue<T>
Sourcepub fn new(capacity: usize) -> Self
pub fn new(capacity: usize) -> Self
Create a queue with a certain capacity. Writes will fail when the queue is full.
Sourcepub fn push(&self, element: T) -> bool
pub fn push(&self, element: T) -> bool
Push an element into the queue and return true
on success.
false
will be returned if the queue is full. If there’s contention this operation will
wait until it’s able to claim a slot in the queue.
This is a CAS loop to increment the head of the queue, then another to push this element in.
Sourcepub fn pop(&self) -> Option<T>
pub fn pop(&self) -> Option<T>
Pop an element from the queue and return true
on success.
false
will be returned if the queue is empty. If there’s contention this operation will
wait until it’s able to claim a slot in the queue.
This is a CAS loop to increment the tail of the queue then another CAS loop to pop the element at this index out.
Sourcepub unsafe fn force_pop(&self) -> T
pub unsafe fn force_pop(&self) -> T
Pop an element from the queue without checking if it’s empty.
§Safety
There’s nothing safe about this.
Sourcepub unsafe fn force_push(&self, element: T)
pub unsafe fn force_push(&self, element: T)
Push an element into the queue without checking if it’s full.
§Safety
There’s nothing safe about this.