diff options
author | Richard Braun <rbraun@sceen.net> | 2017-04-09 16:07:26 +0200 |
---|---|---|
committer | Richard Braun <rbraun@sceen.net> | 2017-04-10 10:17:35 +0200 |
commit | a6eb4749435c116e9f2611abb401959834ef805d (patch) | |
tree | 79fa3fe47457ec42dcb9e0e0f4364d03eb6b1d37 /kern/semaphore.h | |
parent | 42b089048fc0d3e67fa10cb411767afa161c7222 (diff) |
kern/semaphore: optimize for binary semaphores
Diffstat (limited to 'kern/semaphore.h')
-rw-r--r-- | kern/semaphore.h | 14 |
1 files changed, 5 insertions, 9 deletions
diff --git a/kern/semaphore.h b/kern/semaphore.h index db66af9b..01111856 100644 --- a/kern/semaphore.h +++ b/kern/semaphore.h @@ -66,7 +66,7 @@ semaphore_trywait(struct semaphore *semaphore) prev = semaphore_dec(semaphore); - if (prev == 0) { + if (unlikely(prev == 0)) { return ERROR_AGAIN; } @@ -86,11 +86,9 @@ semaphore_wait(struct semaphore *semaphore) prev = semaphore_dec(semaphore); - if (prev != 0) { - return; + if (unlikely(prev == 0)) { + semaphore_wait_slow(semaphore); } - - semaphore_wait_slow(semaphore); } /* @@ -108,11 +106,9 @@ semaphore_post(struct semaphore *semaphore) prev = semaphore_inc(semaphore); - if (prev != 0) { - return; + if (unlikely(prev == 0)) { + semaphore_post_slow(semaphore); } - - semaphore_post_slow(semaphore); } /* |