NAME Data::Heap::Shared - Shared-memory binary min-heap (priority queue) for Linux SYNOPSIS use Data::Heap::Shared; my $heap = Data::Heap::Shared->new(undef, 1000); $heap->push(3, 300); # priority=3, value=300 $heap->push(1, 100); $heap->push(2, 200); my ($pri, $val) = $heap->pop; # (1, 100) — lowest priority first my ($pri, $val) = $heap->peek; # (2, 200) — without removing # blocking pop my ($pri, $val) = $heap->pop_wait(5.0); DESCRIPTION Binary min-heap in shared memory. Elements are "(priority, value)" integer pairs. Lowest priority pops first. Mutex-protected push/pop with sift-up/sift-down. PID-based stale mutex recovery. Futex blocking when empty. Crash safety: if a process dies while holding the heap mutex (mid-push or mid-pop), the mutex is recovered via PID detection, but the heap data may be in an inconsistent state (partially sifted). Callers should "clear" and rebuild if crash recovery is triggered in a critical application. Linux-only. Requires 64-bit Perl. METHODS $heap->push($priority, $value); # returns bool my ($pri, $val) = $heap->pop; # returns () if empty my ($pri, $val) = $heap->pop_wait; # blocking my ($pri, $val) = $heap->pop_wait($t); # with timeout my ($pri, $val) = $heap->peek; # without removing $heap->size; $heap->capacity; $heap->is_empty; $heap->is_full; $heap->clear; $heap->stats; $heap->path; $heap->memfd; $heap->sync; $heap->unlink; # constructors $heap = Data::Heap::Shared->new_memfd($name, $capacity); $heap = Data::Heap::Shared->new_from_fd($fd); # eventfd $heap->eventfd; $heap->eventfd_set($fd); $heap->fileno; $heap->notify; $heap->eventfd_consume; STATS stats() returns: "size", "capacity", "pushes", "pops", "waits", "timeouts", "recoveries", "mmap_size". BENCHMARKS Single-process (500K ops, x86_64 Linux, Perl 5.40): push (sequential) 5.3M/s pop (drain) 2.5M/s push+pop (interleaved) 2.5M/s peek 4.9M/s Multi-process (4 workers, 100K ops each, cap=64): push+pop 3.1M/s aggregate SECURITY The mmap region is writable by all processes that open it. Do not share backing files with untrusted processes. SEE ALSO Data::Stack::Shared - LIFO stack Data::Deque::Shared - double-ended queue Data::Queue::Shared - FIFO queue Data::ReqRep::Shared - request-reply Data::Pool::Shared - fixed-size object pool Data::Log::Shared - append-only log (WAL) Data::Buffer::Shared - typed shared array Data::Sync::Shared - synchronization primitives Data::HashMap::Shared - concurrent hash table Data::PubSub::Shared - publish-subscribe ring Data::Graph::Shared - directed weighted graph Data::BitSet::Shared - shared bitset (lock-free per-bit ops) Data::RingBuffer::Shared - fixed-size overwriting ring buffer AUTHOR vividsnow LICENSE This is free software; you can redistribute it and/or modify it under the same terms as Perl itself.