futures_intrusive::sync

Struct GenericSemaphore

Source
pub struct GenericSemaphore<MutexType: RawMutex> { /* private fields */ }
Expand description

A futures-aware semaphore.

Implementations§

Source§

impl<MutexType: RawMutex> GenericSemaphore<MutexType>

Source

pub fn new(is_fair: bool, permits: usize) -> GenericSemaphore<MutexType>

Creates a new futures-aware semaphore.

is_fair defines whether the Semaphore should behave be fair regarding the order of waiters. A fair Semaphore will only allow the oldest waiter on a Semaphore to retry acquiring it once it’s available again. Other waiters must wait until either this acquire attempt completes, and the Semaphore has enough permits after that, or until the SemaphoreAcquireFuture which tried to acquire the Semaphore is dropped.

If the Semaphore isn’t fair, waiters that wait for a high amount of permits might never succeed since the permits might be stolen in between by other waiters. Therefore use-cases which make use of very different amount of permits per acquire should use fair semaphores. For use-cases where each acquire() tries to acquire the same amount of permits an unfair Semaphore might provide throughput advantages.

permits is the amount of permits that a semaphore should hold when created.

Source

pub fn acquire( &self, nr_permits: usize, ) -> GenericSemaphoreAcquireFuture<'_, MutexType>

Acquire a certain amount of permits on a semaphore asynchronously.

This method returns a future that will resolve once the given amount of permits have been acquired. The Future will resolve to a GenericSemaphoreReleaser, which will release all acquired permits automatically when dropped.

Source

pub fn try_acquire( &self, nr_permits: usize, ) -> Option<GenericSemaphoreReleaser<'_, MutexType>>

Tries to acquire a certain amount of permits on a semaphore.

If acquiring the permits is successful, a GenericSemaphoreReleaser will be returned, which will release all acquired permits automatically when dropped.

Otherwise None will be returned.

Source

pub fn release(&self, nr_permits: usize)

Releases the given amount of permits back to the semaphore.

This method should in most cases not be used, since the GenericSemaphoreReleaser which is obtained when acquiring a Semaphore will automatically release the obtained permits again.

Therefore this method should only be used if the automatic release was disabled by calling GenericSemaphoreReleaser::disarm, or when the amount of permits in the Semaphore should increase from the initial amount.

Source

pub fn permits(&self) -> usize

Returns the amount of permits that are available on the semaphore

Trait Implementations§

Source§

impl<MutexType: RawMutex> Debug for GenericSemaphore<MutexType>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<MutexType: RawMutex + Send> Send for GenericSemaphore<MutexType>

Source§

impl<MutexType: RawMutex + Sync> Sync for GenericSemaphore<MutexType>

Auto Trait Implementations§

§

impl<MutexType> !Freeze for GenericSemaphore<MutexType>

§

impl<MutexType> !RefUnwindSafe for GenericSemaphore<MutexType>

§

impl<MutexType> Unpin for GenericSemaphore<MutexType>
where MutexType: Unpin,

§

impl<MutexType> UnwindSafe for GenericSemaphore<MutexType>
where MutexType: UnwindSafe,

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.