如果要在Linux上使用严格的二进制信号量,建议使用互斥量和条件变量构建一个。
struct binary_semaphore { pthread_mutex_t mutex; pthread_cond_t cvar; int v;};void mysem_post(struct binary_semaphore *p){ pthread_mutex_lock(&p->mutex); if (p->v == 1) p->v += 1; pthread_cond_signal(&p->cvar); pthread_mutex_unlock(&p->mutex);}void mysem_wait(struct binar_semaphore *p){ pthread_mutex_lock(&p->mutex); while (!p->v) pthread_cond_wait(&p->cvar, &p->mutex); p->v -= 1; pthread_mutex_unlock(&p->mutex);}


