diff options
author | Carl Lerche <me@carllerche.com> | 2020-01-03 10:34:15 -0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-01-03 10:34:15 -0800 |
commit | efcbf9613f2d5048550f9c828e3be422644f1391 (patch) | |
tree | f8c77a9d21c57f80ed989d16839acffe850baf77 /tokio/src/sync/semaphore.rs | |
parent | 3736467dbb74ea6d14091cf1cac3ce08e1fcb911 (diff) |
sync: add batch op support to internal semaphore (#2004)
Extend internal semaphore to support batch operations. With this PR,
consumers of the semaphore are able to atomically request more than one
permit. This is useful for implementing a RwLock.
Diffstat (limited to 'tokio/src/sync/semaphore.rs')
-rw-r--r-- | tokio/src/sync/semaphore.rs | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/tokio/src/sync/semaphore.rs b/tokio/src/sync/semaphore.rs index 2cfb5d34..13d5cfb2 100644 --- a/tokio/src/sync/semaphore.rs +++ b/tokio/src/sync/semaphore.rs @@ -60,7 +60,7 @@ impl Semaphore { sem: &self, ll_permit: ll::Permit::new(), }; - poll_fn(|cx| permit.ll_permit.poll_acquire(cx, &self.ll_sem)) + poll_fn(|cx| permit.ll_permit.poll_acquire(cx, 1, &self.ll_sem)) .await .unwrap(); permit @@ -69,7 +69,7 @@ impl Semaphore { /// Try to acquire a permit form the semaphore pub fn try_acquire(&self) -> Result<SemaphorePermit<'_>, TryAcquireError> { let mut ll_permit = ll::Permit::new(); - match ll_permit.try_acquire(&self.ll_sem) { + match ll_permit.try_acquire(1, &self.ll_sem) { Ok(_) => Ok(SemaphorePermit { sem: self, ll_permit, @@ -84,12 +84,12 @@ impl<'a> SemaphorePermit<'a> { /// This can be used to reduce the amount of permits available from a /// semaphore. pub fn forget(mut self) { - self.ll_permit.forget(); + self.ll_permit.forget(1); } } impl<'a> Drop for SemaphorePermit<'_> { fn drop(&mut self) { - self.ll_permit.release(&self.sem.ll_sem); + self.ll_permit.release(1, &self.sem.ll_sem); } } |