ExpertiDict

C · Avançado · Português · Técnico

variável de condição

/va.ˈɾja.vew dʒi kõ.dʒi.ˈsɐ̃w̃/substantivo

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

Veja também

Todos os termos de C