Я рассматриваю, возможно ли реализовать pthread_cond_wait()
и pthread_cond_signal()
, используя семафор, встроенный в переменную условия.
Для pthread_cond_wait()
он работает, разблокируя мьютекс, вызывая sem_wait()
, затем повторная фиксация блокировки.
pthread_cond_wait:
mutex_unlock(mutex)
sem_wait(cond->sem)
mutex_lock(mutex)
Для pthread_cond_signal()
он вызовет sem_post()
.
pthread_cond_signal:
sem_post(cond->sem)
Я думаю, что если много потоков ожидают, тосигнал только увеличит семафор на 1, что все равно будет отрицательным.Так что никакие потоки не проснутся, пока у нас не будет столько сигналов, сколько ожидающих потоков, что означает, что эта реализация не работает?