pub struct NotificationSlot { /* private fields */ }Expand description
Per-source notification slot with atomic sequence counter.
Occupies exactly one cache line (64 bytes) to prevent false sharing when
multiple slots are stored contiguously in NotificationHub.
§Layout
offset 0: sequence (AtomicU64, 8 bytes)
offset 8: source_id (u32, 4 bytes)
offset 12: active (AtomicBool, 1 byte)
offset 13: _pad ([u8; 51])
total: 64 bytes = 1 cache line§Thread Safety
notify()is called from Ring 0 (single writer per slot).current_sequence()is called from Ring 1 (readers).deactivate()/reactivate()are Ring 2 lifecycle operations.
Implementations§
Source§impl NotificationSlot
impl NotificationSlot
Sourcepub const fn new(source_id: u32) -> Self
pub const fn new(source_id: u32) -> Self
Creates a new notification slot for the given source.
Initial state: sequence = 0, active = true.
Sourcepub fn notify(&self) -> u64
pub fn notify(&self) -> u64
Increments the sequence counter and returns the new value.
This is the Ring 0 hot-path operation: a single fetch_add with
Release ordering so that Ring 1 readers see the updated sequence.
Sourcepub fn current_sequence(&self) -> u64
pub fn current_sequence(&self) -> u64
Returns the current sequence number (Acquire load).
Sourcepub fn deactivate(&self)
pub fn deactivate(&self)
Marks this slot as inactive (Ring 2 lifecycle operation).
Inactive slots are skipped by NotificationHub::notify_source.
Sourcepub fn reactivate(&self)
pub fn reactivate(&self)
Re-activates a previously deactivated slot (Ring 2 lifecycle operation).
Auto Trait Implementations§
impl !Freeze for NotificationSlot
impl RefUnwindSafe for NotificationSlot
impl Send for NotificationSlot
impl Sync for NotificationSlot
impl Unpin for NotificationSlot
impl UnwindSafe for NotificationSlot
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<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>
Returns the layout of the type.
Source§impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
impl<T, N1, N2> Niching<NichedOption<T, N1>> for N2
Source§unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
unsafe fn is_niched(niched: *const NichedOption<T, N1>) -> bool
Returns whether the given value has been niched. Read more
Source§fn resolve_niched(out: Place<NichedOption<T, N1>>)
fn resolve_niched(out: Place<NichedOption<T, N1>>)
Writes data to
out indicating that a T is niched.