summaryrefslogtreecommitdiff
path: root/kern/semaphore.h
diff options
context:
space:
mode:
authorRichard Braun <rbraun@sceen.net>2017-04-09 16:07:26 +0200
committerRichard Braun <rbraun@sceen.net>2017-04-10 10:17:35 +0200
commita6eb4749435c116e9f2611abb401959834ef805d (patch)
tree79fa3fe47457ec42dcb9e0e0f4364d03eb6b1d37 /kern/semaphore.h
parent42b089048fc0d3e67fa10cb411767afa161c7222 (diff)
kern/semaphore: optimize for binary semaphores
Diffstat (limited to 'kern/semaphore.h')
-rw-r--r--kern/semaphore.h14
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);
}
/*