Aula 11: Variáveis de Condição — Coordenação entre Threads
Um mutex evita race conditions, mas não permite que uma thread espere até que uma condição se torne verdadeira. Variáveis de condição (condition variables) permitem que uma thread durma de forma eficiente até que outra thread sinalize que algo mudou.
Uma variável de condição é como a campainha de uma loja: você espera na porta e quando alguém coloca um item na prateleira, ela toca — então você entra.
- variável de condição
- Um primitivo de sincronização que permite que uma thread espere atomicamente por uma condição enquanto libera o mutex, e acorde quando outra thread sinaliza.
- produtor-consumidor
- Um padrão de programação em que uma thread (produtora) gera dados e os coloca num buffer, e outra thread (consumidora) os retira e processa.
- despertar espúrio
- Uma situação em que pthread_cond_wait retorna mesmo que nenhuma thread tenha chamado signal. Exige checar o predicado dentro de um loop.
- broadcast
- pthread_cond_broadcast acorda todas as threads que estão esperando numa condition variable, ao contrário de signal, que acorda só uma.
- predicado
- A condição que se checa antes e depois de pthread_cond_wait para se proteger de despertares espúrios e problemas de TOCTOU.