3 #include "psemaphore.h"
6 void psem_init(psemaphore* sem) {
7 pthread_mutex_init(&(sem->lock), NULL);
8 pthread_cond_init(&(sem->cond), NULL);
14 void psem_take(psemaphore* sem, struct garbagelist* gl) {
15 pthread_mutex_lock(&(sem->lock) );
16 if( !sem->signaled ) {
19 pthread_cond_wait(&(sem->cond), &(sem->lock) );
20 } while( !sem->signaled );
23 pthread_mutex_unlock(&(sem->lock) );
27 void psem_give(psemaphore* sem) {
28 pthread_mutex_lock(&(sem->lock) );
30 pthread_cond_signal(&(sem->cond) );
31 pthread_mutex_unlock(&(sem->lock) );
34 void psem_give_tag(psemaphore* sem, int tag) {
35 pthread_mutex_lock(&(sem->lock) );
38 pthread_cond_signal(&(sem->cond) );
40 pthread_mutex_unlock(&(sem->lock) );
44 void psem_reset(psemaphore* sem) {
45 pthread_mutex_lock(&(sem->lock) );
48 pthread_mutex_unlock(&(sem->lock) );