Changes in kernel/generic/src/synch/semaphore.c [e88eb48:597fa24] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/synch/semaphore.c
re88eb48 r597fa24 52 52 void semaphore_initialize(semaphore_t *sem, int val) 53 53 { 54 waitq_initialize(&sem->wq); 55 waitq_count_set(&sem->wq, val); 54 *sem = SEMAPHORE_INITIALIZER(*sem, val); 56 55 } 57 56 58 /** Semaphore down 59 * 60 * Semaphore down. 61 * Conditional mode and mode with timeout can be requested. 57 errno_t semaphore_trydown(semaphore_t *sem) 58 { 59 return semaphore_down_timeout(sem, 0); 60 } 61 62 /** Semaphore down with timeout 62 63 * 63 64 * @param sem Semaphore. 64 65 * @param usec Timeout in microseconds. 65 * @param flags Select mode of operation.66 *67 * For exact description of possible combinations of68 * usec and flags, see comment for waitq_sleep_timeout().69 66 * 70 67 * @return See comment for waitq_sleep_timeout(). 71 68 * 72 69 */ 73 errno_t _semaphore_down_timeout(semaphore_t *sem, uint32_t usec, unsigned int flags)70 errno_t semaphore_down_timeout(semaphore_t *sem, uint32_t usec) 74 71 { 75 return waitq_sleep_timeout(&sem->wq, usec, flags, NULL); 72 errno_t rc = waitq_sleep_timeout(&sem->wq, usec); 73 assert(rc == EOK || rc == ETIMEOUT || rc == EAGAIN); 74 return rc; 75 } 76 77 void semaphore_down(semaphore_t *sem) 78 { 79 errno_t rc = waitq_sleep(&sem->wq); 80 assert(rc == EOK); 76 81 } 77 82 … … 85 90 void semaphore_up(semaphore_t *sem) 86 91 { 87 waitq_wakeup(&sem->wq, WAKEUP_FIRST); 88 } 89 90 /** Get the semaphore counter value. 91 * 92 * @param sem Semaphore. 93 * @return The number of threads that can down the semaphore 94 * without blocking. 95 */ 96 int semaphore_count_get(semaphore_t *sem) 97 { 98 return waitq_count_get(&sem->wq); 92 waitq_wake_one(&sem->wq); 99 93 } 100 94
Note:
See TracChangeset
for help on using the changeset viewer.