Допустим, есть некая очередь, защищенная мутексом. На входе и на выходе - по несколько потоков. Если очередь пуста, то получатели «посылок» блокируются в pthread_cond_wait(). Если что-то ставим в очередь, то дергаем pthread_cond_signal(), чтобы кто-то из получателей получил «посылочку».
Если бы на входе был только один поток, то все понятно: кто-то из получателей очнется, получит мутекс и сделает свое дело.
Но если на входе несколько потоков, желающих что-то положить в очередь, то они сами могут ждать мутекс. И проснувшиеся получатели тоже ждут мутекс!
Вопрос: кто и в каком порядке будет получать мутекс? Будет ли различие между теми, кто просто пытается сделать pthread_mutex_lock(), и теми, кто вываливается из pthread_cond_wait()?