8 pthread_mutex_t* lock = naAlloc(sizeof(pthread_mutex_t));
9 pthread_mutex_init(lock, 0);
13 void naFreeLock(void* lock)
15 pthread_mutex_destroy(lock);
19 void naLock(void* lock)
21 pthread_mutex_lock((pthread_mutex_t*)lock);
24 void naUnlock(void* lock)
26 pthread_mutex_unlock((pthread_mutex_t*)lock);
37 struct naSem* sem = naAlloc(sizeof(struct naSem));
38 pthread_mutex_init(&sem->lock , 0);
39 pthread_cond_init(&sem->cvar, 0);
44 void naFreeSem(void* p)
46 struct naSem* sem = p;
47 pthread_mutex_destroy(&sem->lock);
48 pthread_cond_destroy(&sem->cvar);
52 void naSemDown(void* sh)
54 struct naSem* sem = (struct naSem*)sh;
55 pthread_mutex_lock(&sem->lock);
56 while(sem->count <= 0)
57 pthread_cond_wait(&sem->cvar, &sem->lock);
59 pthread_mutex_unlock(&sem->lock);
62 void naSemUp(void* sh, int count)
64 struct naSem* sem = (struct naSem*)sh;
65 pthread_mutex_lock(&sem->lock);
67 pthread_cond_broadcast(&sem->cvar);
68 pthread_mutex_unlock(&sem->lock);
73 extern int GccWarningWorkaround_IsoCForbidsAnEmptySourceFile;