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) );