C · Avançado · Português · Técnico
variável de condição
Primitiva (pthread_cond_t) que permite a uma thread dormir até que outra sinalize uma mudança de estado. Sempre usada com um mutex e um predicado verificado em laço.
Onde usar
Aparece em filas de produtor e consumidor. Em review se exige while em volta de pthread_cond_wait, pois a thread pode acordar sem sinal (spurious wakeup) e a condição precisa ser conferida de novo.
Em código
#include <pthread.h>
pthread_mutex_t m = PTHREAD_MUTEX_INITIALIZER;
pthread_cond_t c = PTHREAD_COND_INITIALIZER;
void espera(int *pronto) {
pthread_mutex_lock(&m);
while (!*pronto) pthread_cond_wait(&c, &m);
pthread_mutex_unlock(&m);
}Exemplos
Espera na variável de condição dentro de um while, nunca de um if.
O consumidor dorme até o produtor sinalizar a variável de condição.
Cuidado
Usar if em vez de while ao esperar, ou sinalizar sem alterar o estado protegido pelo mutex.
Sinônimos
condition variable