于是你发明了 “信号量”!
void P(sem_t *sem) {
mutex_lock(&sem->lk);
while (!(sem->count > 0)) {
cond_wait(&sem->cv, &sem->lk);
}
sem->count--;
mutex_unlock(&sem->lk);
}
void V(sem_t *sem) {
mutex_lock(&sem->lk);
sem->count++;
cond_broadcast(&sem->cv);
mutex_unlock(&sem->lk);
}