20 #ifndef __pbd_semaphore_h__
21 #define __pbd_semaphore_h__
24 # include <mach/mach.h>
25 #elif defined(PLATFORM_WINDOWS)
28 #define INFINITE 0xffffffffL
74 #if defined(__APPLE__)
76 #elif defined(PLATFORM_WINDOWS)
88 if (semaphore_create(mach_task_self(), &
_sem, SYNC_POLICY_FIFO, initial)) {
96 semaphore_destroy(mach_task_self(),
_sem);
102 semaphore_signal(
_sem);
108 if (semaphore_wait(
_sem) != KERN_SUCCESS) {
117 const mach_timespec_t zero = { 0, 0 };
118 return semaphore_timedwait(
_sem, zero) == KERN_SUCCESS;
121 #elif defined(PLATFORM_WINDOWS)
126 if (!(
_sem = CreateSemaphore(NULL, initial, LONG_MAX, NULL))) {
140 ReleaseSemaphore(
_sem, 1, NULL);
146 if (WaitForSingleObject(
_sem, INFINITE) != WAIT_OBJECT_0) {
155 return WaitForSingleObject(
_sem, 0) == WAIT_OBJECT_0;
162 if (sem_init(&
_sem, 0, initial)) {
182 while (sem_wait(&
_sem)) {
183 if (errno != EINTR) {
195 return (sem_trywait(&
_sem) == 0);
Semaphore(unsigned initial)