#[repr(C, align(64))]pub struct KhpdHeader {
pub magic: u64,
pub capacity: u64,
pub owner_pid: AtomicU64,
pub epoch: AtomicU64,
pub _pad_meta: [u8; 24],
pub tail: AtomicI64,
pub _pad_tail: [u8; 56],
pub head: AtomicI64,
pub _pad_head: [u8; 56],
}Expand description
File header. Cache-line aligned. head and tail each get
their own cache line to prevent producer and consumer counters
from invalidating each other.
Fields§
§magic: u64Magic constant.
capacity: u64Number of publication lines; always a power of two.
owner_pid: AtomicU64Pid of the owner process; informational. Cleared on
close_owner().
epoch: AtomicU64Epoch counter advanced on owner shutdown.
_pad_meta: [u8; 24]Padding to push tail to its own cache line.
tail: AtomicI64Producer counter. Owner fetch_add(1) per published line.
_pad_tail: [u8; 56]Padding to push head to its own line.
head: AtomicI64Consumer counter. Thieves CAS this to claim a line.
_pad_head: [u8; 56]Padding to round the header to two whole cache lines after
head.
Auto Trait Implementations§
impl !Freeze for KhpdHeader
impl RefUnwindSafe for KhpdHeader
impl Send for KhpdHeader
impl Sync for KhpdHeader
impl Unpin for KhpdHeader
impl UnsafeUnpin for KhpdHeader
impl UnwindSafe for KhpdHeader
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