Реализация pthread_cond_wait () и signal () с семафорами - PullRequest
0 голосов
/ 03 декабря 2018

Я рассматриваю, возможно ли реализовать 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, что все равно будет отрицательным.Так что никакие потоки не проснутся, пока у нас не будет столько сигналов, сколько ожидающих потоков, что означает, что эта реализация не работает?

...