pub struct BlockingSemaphore { /* private fields */ }Expand description
Cross-process semaphore with a kernel-park slow path.
Implementations§
Source§impl BlockingSemaphore
impl BlockingSemaphore
Sourcepub fn create(
base_path: impl AsRef<Path>,
max_permits: u32,
init_permits: u32,
) -> Result<Self, BlockingSemaphoreError>
pub fn create( base_path: impl AsRef<Path>, max_permits: u32, init_permits: u32, ) -> Result<Self, BlockingSemaphoreError>
Create a new blocking semaphore. Lays out the underlying
SharedSemaphore files plus a <base>.waker.bin for the
waker. Caller picks max_permits (capacity) and
init_permits (starting value); see
SharedSemaphore::create for semantics.
Sourcepub fn open(
base_path: impl AsRef<Path>,
expected_max_permits: u32,
) -> Result<Self, BlockingSemaphoreError>
pub fn open( base_path: impl AsRef<Path>, expected_max_permits: u32, ) -> Result<Self, BlockingSemaphoreError>
Open an existing blocking semaphore.
Sourcepub fn try_acquire(&self) -> Result<BlockingPermit<'_>, BlockingSemaphoreError>
pub fn try_acquire(&self) -> Result<BlockingPermit<'_>, BlockingSemaphoreError>
Non-blocking acquire. Pure CAS; never sleeps.
Sourcepub fn acquire_park(&self) -> Result<BlockingPermit<'_>, BlockingSemaphoreError>
pub fn acquire_park(&self) -> Result<BlockingPermit<'_>, BlockingSemaphoreError>
Blocking acquire with kernel-park slow path. Returns when a
permit is available. No timeout variant returns
Err(Timeout); for a bounded wait use acquire_park_timeout.
Sourcepub fn acquire_park_timeout(
&self,
timeout: Duration,
) -> Result<BlockingPermit<'_>, BlockingSemaphoreError>
pub fn acquire_park_timeout( &self, timeout: Duration, ) -> Result<BlockingPermit<'_>, BlockingSemaphoreError>
Blocking acquire with bounded wait. Err(Timeout) when the
timeout elapses before a permit is available.
Sourcepub fn release(&self) -> Result<(), BlockingSemaphoreError>
pub fn release(&self) -> Result<(), BlockingSemaphoreError>
Release one permit. Bumps the inner generation atom and
fires wake_up_to(new_gen) on the waker.
Sourcepub fn max_permits(&self) -> u32
pub fn max_permits(&self) -> u32
Cap fixed at construction.
Sourcepub fn inner(&self) -> &Arc<SharedSemaphore> ⓘ
pub fn inner(&self) -> &Arc<SharedSemaphore> ⓘ
Inner primitive (for sidecar / observability hooks).