How to initialise a binary semaphore in C How to initialise a binary semaphore in C linux linux

How to initialise a binary semaphore in C


If you want a strictly binary semaphore on Linux, I suggest building one out of mutexes and condition variables.

struct binary_semaphore {    pthread_mutex_t mutex;    pthread_cond_t cvar;    bool v;};void mysem_post(struct binary_semaphore *p){    pthread_mutex_lock(&p->mutex);    if (p->v)        abort(); // error    p->v = true;    pthread_cond_signal(&p->cvar);    pthread_mutex_unlock(&p->mutex);}void mysem_wait(struct binary_semaphore *p){    pthread_mutex_lock(&p->mutex);    while (!p->v)        pthread_cond_wait(&p->cvar, &p->mutex);    p->v = false;    pthread_mutex_unlock(&p->mutex);}