1 #ifndef DISPATCH_WIN_POSIX_SEMAPHORE_
\r
2 #define DISPATCH_WIN_POSIX_SEMAPHORE_
\r
6 static int sem_init(sem_t * sem, int shared, unsigned int val)
8 *sem = CreateSemaphore(0, val, 1, 0);
9 // TODO: Proper error handling
13 static inline int sem_destroy(sem_t* s)
15 return CloseHandle(s) != 1;
18 static inline int sem_post(sem_t* s)
20 return !ReleaseSemaphore(s, 1, 0);
23 static inline int sem_wait(sem_t* s)
25 return WaitForSingleObject(s, INFINITE) == WAIT_FAILED;
28 static int sem_timedwait(sem_t * sem, const struct timespec * timeout)
\r
30 DWORD duration = (DWORD)(timeout->tv_nsec / 1000000) + (DWORD)(timeout->tv_sec * 1000);
32 switch(WaitForSingleObject(sem,duration) ){
42 #endif /* DISPATCH_WIN_POSIX_SEMAPHORE_ */
\r