Assignment name: producer_consumer Expected files: producer_consumer.c Allowed functions: memset, printf, malloc, free, write, pthread_create, pthread_detach, pthread_join, pthread_mutex_init, pthread_mutex_destroy, pthread_mutex_lock, pthread_mutex_unlock, usleep, gettimeofday --------------------------------------------------------------------------- Implementa o problema clássico Producer-Consumer: - 2 threads Producer: produzem items (números de 1 a 100) e colocam num buffer - 2 threads Consumer: consomem items do buffer e processam-nos - Buffer partilhado com capacidade limitada (10 items) Regras: - Producers devem esperar se buffer estiver cheio - Consumers devem esperar se buffer estiver vazio - Não deve haver race conditions - Imprime quando items são produzidos/consumidos Uso: `./producer_consumer` Hint: Este exercício ensina-te a coordenação entre múltiplas threads com recursos limitados. É similar ao problema dos forks no Philosophers. Usa mutexes para proteger o buffer e condition variables ou sleep para coordenação.