O pthread_cond_wait () sempre vence a competição bloqueando um mutex?

Esta pergunta é referente ao tutorial pthread emllnl. Diga que existem três tópicos.

Tópico 1:

pthread_mutex_lock(&mutex)
do_something...
if condition
    pthread_cond_signal(&con)
pthread_mutex_unlock(&mutex)
repeat

Tópico 2:

pthread_mutex_lock(&mutex)
do_something...
if condition
    pthread_cond_signal(&con)
pthread_mutex_unlock(&mutex)
repeat

Tópico 3:

pthread_mutex_lock(&mutex)
while(condition not holds)
    pthread_cond_wait(&con)
    do_something...
pthread_mutex_unlock(&mutex)

Assuma issoThread1 verifica se a condição está satisfeita e envia um sinal para acordarThread3. Finalmente, desbloqueia o mutex. Mas ao mesmo tempo,Tópico 2 está tentando bloquear o mutex.

Minha pergunta é: existe alguma garantia de queThread3 sempre vencerá na competição?

Se não, então depoisThread2 do_something ..., a variável de condição pode ser alterada e, quandoThread3 consegue bloquear o mutex, a variável de condição é diferente do que ela espera.

questionAnswers(2)

yourAnswerToTheQuestion