Lines Matching refs:sem
84 #define sem_init(sem, sem_attr1, sem_init_value) (int)((*sem = CreateSemaphore(NULL,0,32768,NULL))==NULL)
85 #define sem_wait(sem) (int)(WAIT_OBJECT_0 != WaitForSingleObject(*sem,INFINITE))
86 #define sem_post(sem) ReleaseSemaphore(*sem,1,NULL)
87 #define sem_destroy(sem) if(*sem)((int)(CloseHandle(*sem))==TRUE)
99 static inline int sem_init(sem_t *sem, int pshared, unsigned int value)
101 DosCreateEventSem(NULL, &sem->event, pshared ? DC_SEM_SHARED : 0,
103 DosCreateMutexSem(NULL, &sem->wait_mutex, 0, FALSE);
104 DosCreateMutexSem(NULL, &sem->count_mutex, 0, FALSE);
106 sem->count = value;
111 static inline int sem_wait(sem_t * sem)
113 DosRequestMutexSem(sem->wait_mutex, -1);
115 DosWaitEventSem(sem->event, -1);
117 DosRequestMutexSem(sem->count_mutex, -1);
119 sem->count--;
120 if (sem->count == 0)
124 DosResetEventSem(sem->event, &post_count);
127 DosReleaseMutexSem(sem->count_mutex);
129 DosReleaseMutexSem(sem->wait_mutex);
134 static inline int sem_post(sem_t * sem)
136 DosRequestMutexSem(sem->count_mutex, -1);
138 if (sem->count < 32768)
140 sem->count++;
141 DosPostEventSem(sem->event);
144 DosReleaseMutexSem(sem->count_mutex);
149 static inline int sem_destroy(sem_t * sem)
151 DosCloseEventSem(sem->event);
152 DosCloseMutexSem(sem->wait_mutex);
153 DosCloseMutexSem(sem->count_mutex);
165 #define sem_wait(sem) (semaphore_wait(*sem) )
166 #define sem_post(sem) semaphore_signal(*sem)
167 #define sem_destroy(sem) semaphore_destroy(mach_task_self(),*sem)