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