diff --git a/mea/src/semaphore/mod.rs b/mea/src/semaphore/mod.rs index 4ac5120..b473e5a 100644 --- a/mea/src/semaphore/mod.rs +++ b/mea/src/semaphore/mod.rs @@ -430,6 +430,23 @@ impl SemaphorePermit<'_> { self.permits = 0; } + /// Releases `n` permits back to the semaphore. + /// + /// # Panics + /// + /// Panics if `n` is greater than the number of permits held by this structure. + pub fn release(&mut self, n: usize) { + assert!( + n <= self.permits, + "release more permits ({}) than held ({})", + n, + self.permits + ); + + self.permits -= n; + self.sem.release(n); + } + /// Returns the number of permits this permit holds. /// /// # Examples @@ -492,6 +509,23 @@ impl OwnedSemaphorePermit { self.permits = 0; } + /// Releases `n` permits back to the semaphore. + /// + /// # Panics + /// + /// Panics if `n` is greater than the number of permits held by this structure. + pub fn release(&mut self, n: usize) { + assert!( + n <= self.permits, + "release more permits ({}) than held ({})", + n, + self.permits + ); + + self.permits -= n; + self.sem.release(n); + } + /// Returns the number of permits this permit holds. /// /// # Examples