| 22 | } |
| 23 | |
| 24 | void semaphore_wait(semaphore_t *sem) |
| 25 | { |
| 26 | int count; |
| 27 | do { |
| 28 | count = atomic_load(&sem->count); |
| 29 | } while (count == 0 || !atomic_compare_exchange_weak(&sem->count, &count, count - 1)); |
| 30 | } |
| 31 | |
| 32 | void semaphore_signal(semaphore_t *sem) |
| 33 | { |
no outgoing calls