Lines Matching refs:sem
40 xsem_init(xsem_t *sem, int pshared, unsigned int value) in xsem_init() argument
45 pthread_mutex_init(&sem->semMutex, NULL); in xsem_init()
46 pthread_cond_init(&sem->semCV, NULL); in xsem_init()
47 sem->semaphore = value; in xsem_init()
53 xsem_destroy(xsem_t *sem) in xsem_destroy() argument
55 pthread_mutex_destroy(&sem->semMutex); in xsem_destroy()
56 pthread_cond_destroy(&sem->semCV); in xsem_destroy()
57 sem->semaphore = 0; in xsem_destroy()
61 xsem_wait(xsem_t *sem) in xsem_wait() argument
63 pthread_mutex_lock(&sem->semMutex); in xsem_wait()
65 if (sem->semaphore < 0) { in xsem_wait()
66 sem->semaphore = 0; in xsem_wait()
67 pthread_mutex_unlock(&sem->semMutex); in xsem_wait()
71 if (sem->semaphore > 0) { in xsem_wait()
72 sem->semaphore--; in xsem_wait()
74 while (sem->semaphore == 0) in xsem_wait()
75 pthread_cond_wait(&sem->semCV, &sem->semMutex); in xsem_wait()
77 if (sem->semaphore != 0) { in xsem_wait()
78 sem->semaphore--; in xsem_wait()
80 pthread_mutex_unlock(&sem->semMutex); in xsem_wait()
85 pthread_mutex_unlock(&sem->semMutex); in xsem_wait()
91 xsem_trywait(xsem_t *sem) in xsem_trywait() argument
93 pthread_mutex_lock(&sem->semMutex); in xsem_trywait()
95 if (sem->semaphore < 0) { in xsem_trywait()
96 sem->semaphore = 0; in xsem_trywait()
97 pthread_mutex_unlock(&sem->semMutex); in xsem_trywait()
101 if (sem->semaphore == 0) { in xsem_trywait()
102 pthread_mutex_unlock(&sem->semMutex); in xsem_trywait()
105 sem->semaphore--; in xsem_trywait()
108 pthread_mutex_unlock(&sem->semMutex); in xsem_trywait()
114 xsem_post(xsem_t *sem) in xsem_post() argument
116 pthread_mutex_lock(&sem->semMutex); in xsem_post()
117 sem->semaphore++; in xsem_post()
118 pthread_cond_signal(&sem->semCV); in xsem_post()
119 pthread_mutex_unlock(&sem->semMutex); in xsem_post()
126 xsem_getvalue(xsem_t *sem, int *sval) in xsem_getvalue() argument
128 *sval = sem->semaphore; in xsem_getvalue()
134 xsem_xwait(xsem_t *sem, int timeout, timestruc_t *mytime) in xsem_xwait() argument
140 return (xsem_wait(sem)); in xsem_xwait()
142 pthread_mutex_lock(&sem->semMutex); in xsem_xwait()
144 if (sem->semaphore < 0) { in xsem_xwait()
145 sem->semaphore = 0; in xsem_xwait()
146 pthread_mutex_unlock(&sem->semMutex); in xsem_xwait()
150 if (sem->semaphore > 0) { in xsem_xwait()
151 sem->semaphore--; in xsem_xwait()
157 while ((sem->semaphore == 0) && (status == 0)) { in xsem_xwait()
158 status = pthread_cond_timedwait(&sem->semCV, in xsem_xwait()
159 &sem->semMutex, &delay); in xsem_xwait()
168 pthread_mutex_unlock(&sem->semMutex); in xsem_xwait()
170 } else if (sem->semaphore != 0) { in xsem_xwait()
171 sem->semaphore--; in xsem_xwait()
173 pthread_mutex_unlock(&sem->semMutex); in xsem_xwait()
178 pthread_mutex_unlock(&sem->semMutex); in xsem_xwait()