pub struct Producer<T, const CAPACITY: usize, A>where
T: AnyBitPattern,
A: Allocator,{ /* private fields */ }Available on non-crate feature
tests_loom only.Expand description
The publishing handle of an SPMC broadcast queue.
Created together with its Consumer by
new. A Producer is Send but not Sync:
at most one thread may publish at a time. To enforce that, the type is
neither Clone nor Copy.
Publishing never blocks and never allocates: when the queue is full the
oldest slot is overwritten, and any consumer that hasn’t read past that
slot will observe a ReadResult::Lapped
on its next read.
Implementations§
Source§impl<T, const CAPACITY: usize, A> Producer<T, CAPACITY, A>where
T: AnyBitPattern,
A: Allocator,
impl<T, const CAPACITY: usize, A> Producer<T, CAPACITY, A>where
T: AnyBitPattern,
A: Allocator,
Sourcepub fn publish(&self, value: T)
pub fn publish(&self, value: T)
Publishes value into the next slot.
Wait-free. Never blocks, never allocates. If the queue is full, the
oldest slot is silently overwritten; consumers that haven’t read past
that slot will observe a ReadResult::Lapped
on their next try_read.
§Examples
use low_latency_data_structures::spmc::{self, ReadResult, new};
use low_latency_data_structures::mem::global::GlobalAllocator;
let (producer, mut consumer) = new::<u64, 16, GlobalAllocator>(
spmc::Options::global_mlocked(),
);
producer.publish(42);
assert_eq!(consumer.try_read(), ReadResult::Value(42));Trait Implementations§
Source§impl<T, const CAPACITY: usize, A> Debug for Producer<T, CAPACITY, A>where
T: AnyBitPattern,
A: Allocator,
impl<T, const CAPACITY: usize, A> Debug for Producer<T, CAPACITY, A>where
T: AnyBitPattern,
A: Allocator,
impl<T, const CAPACITY: usize, A> Send for Producer<T, CAPACITY, A>
Auto Trait Implementations§
impl<T, const CAPACITY: usize, A> !Sync for Producer<T, CAPACITY, A>
impl<T, const CAPACITY: usize, A> Freeze for Producer<T, CAPACITY, A>
impl<T, const CAPACITY: usize, A> RefUnwindSafe for Producer<T, CAPACITY, A>where
Arc<Queue<T, CAPACITY, A>>: RefUnwindSafe,
impl<T, const CAPACITY: usize, A> Unpin for Producer<T, CAPACITY, A>
impl<T, const CAPACITY: usize, A> UnsafeUnpin for Producer<T, CAPACITY, A>where
Arc<Queue<T, CAPACITY, A>>: UnsafeUnpin,
impl<T, const CAPACITY: usize, A> UnwindSafe for Producer<T, CAPACITY, A>where
Arc<Queue<T, CAPACITY, A>>: UnwindSafe,
Blanket Implementations§
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