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

Create a queue with a certain capacity. Writes will fail when the queue is full.

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.

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.

Pop an element from the queue without checking if it’s empty.

Safety

There’s nothing safe about this.

Push an element into the queue without checking if it’s full.

Safety

There’s nothing safe about this.

True if the queue is empty.

Get the length of the queue.

Trait Implementations

Auto Trait Implementations

Blanket Implementations

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.