pub struct SpscQueue { /* private fields */ }Expand description
Single-producer single-consumer lock-free ring buffer.
This implementation is truly lock-free: no mutexes, no blocking. It uses atomic head/tail pointers with acquire/release ordering. Since SPSC has exactly one producer and one consumer, no CAS is needed — ordered loads and stores are sufficient.
§Memory Ordering
- Producer: writes data, then
Release-stores head (publishes the write) - Consumer:
Acquire-loads head (observes the write), reads data, thenRelease-stores tail - This matches the GPU-side H2K/K2H queue protocol (volatile + fence)
Implementations§
Trait Implementations§
Source§impl MessageQueue for SpscQueue
impl MessageQueue for SpscQueue
Source§fn try_enqueue(&self, envelope: MessageEnvelope) -> Result<()>
fn try_enqueue(&self, envelope: MessageEnvelope) -> Result<()>
Try to enqueue a message envelope.
Source§fn try_dequeue(&self) -> Result<MessageEnvelope>
fn try_dequeue(&self) -> Result<MessageEnvelope>
Try to dequeue a message envelope.
Source§fn stats(&self) -> QueueStats
fn stats(&self) -> QueueStats
Get queue statistics.
Source§fn reset_stats(&self)
fn reset_stats(&self)
Reset queue statistics.
impl Send for SpscQueue
impl Sync for SpscQueue
Auto Trait Implementations§
impl !Freeze for SpscQueue
impl !RefUnwindSafe for SpscQueue
impl Unpin for SpscQueue
impl UnsafeUnpin for SpscQueue
impl UnwindSafe for SpscQueue
Blanket Implementations§
Source§impl<T> ArchivePointee for T
impl<T> ArchivePointee for T
Source§type ArchivedMetadata = ()
type ArchivedMetadata = ()
The archived version of the pointer metadata for this type.
Source§fn pointer_metadata(
_: &<T as ArchivePointee>::ArchivedMetadata,
) -> <T as Pointee>::Metadata
fn pointer_metadata( _: &<T as ArchivePointee>::ArchivedMetadata, ) -> <T as Pointee>::Metadata
Converts some archived metadata to the pointer metadata for itself.
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<F, W, T, D> Deserialize<With<T, W>, D> for F
impl<F, W, T, D> Deserialize<With<T, W>, D> for F
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> LayoutRaw for T
impl<T> LayoutRaw for T
Source§fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
fn layout_raw(_: <T as Pointee>::Metadata) -> Result<Layout, LayoutError>
Gets the layout of the type.