Condition Variable
Definição
Uma Condition Variable é um mecanismo de sincronização que permite que threads aguardem até que uma determinada condição seja satisfeita, liberando temporariamente o lock associado durante a espera.
Ela é usada em conjunto com um Lock ou Mutex para coordenar o acesso a recursos compartilhados de forma segura e controlada.
Diferente de um Lock, que apenas garante exclusão mútua, a Condition permite que uma thread espere até que um estado desejado seja atingido e seja notificada por outra thread.
Objetivos do uso de Condition Variables
- Permitir que threads esperem por condições específicas de forma segura.
- Evitar loops de verificação ativa (busy waiting).
- Coordenar produtores e consumidores, ou outras situações com dependência de estado.
- Garantir acesso ordenado a recursos com múltiplas etapas de sincronização.
Exemplo prático (Python)
import threading
buffer = []
cond = threading.Condition()
def produtor():
    with cond:
        print("Produtor: produzindo item...")
        buffer.append(1)
        cond.notify()  # notifica o consumidor
def consumidor():
    with cond:
        while not buffer:
            print("Consumidor: esperando item...")
            cond.wait()  # espera ser notificado
        item = buffer.pop()
        print("Consumidor: consumiu item", item)
t1 = threading.Thread(target=consumidor)
t2 = threading.Thread(target=produtor)
t1.start()
t2.start()
t1.join()
t2.join()
Saída esperada
Consumidor: esperando item...
Produtor: produzindo item...
Consumidor: consumiu item 1
- O consumidor espera pela condição - not buffer.
- O produtor notifica que o item foi adicionado. 
- A execução continua de forma ordenada e segura. 
ℹ️ Info: Após
wait(), a thread deve verificar novamente a condição, pois outras threads podem ter alterado o estado antes do retorno.
O ciclo de uma Condition Variable
Thread A → adquire lock → verifica condição
          ↳ condição falsa → chama .wait() → libera lock e espera
Thread B → adquire lock → altera estado → chama .notify()
Thread A → acorda → re-adquire lock → verifica novamente
Onde é usada
- Problemas de produtor-consumidor
- Fila de tarefas com múltiplos consumidores
- Threads que aguardam eventos internos ou sinais
- Implementações manuais de barreiras e semáforos personalizados
ℹ️ Uma Condition Variable não protege os dados diretamente — ela é usada junto com locks para aguardar mudanças de estado com segurança.
 ECOSSISTEMA PYTHON
 ECOSSISTEMA PYTHON  LINUX
 LINUX  ASSEMBLY NASM
 ASSEMBLY NASM  JAVA
 JAVA