**Assignment name**: state_monitor **Expected files**: state_monitor.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 --------------------------------------------------------------------------- Cria um programa com 3 threads "worker" e 1 thread "monitor": **Worker threads**: Cada thread alterna entre 3 estados: - WORKING (2 segundos) - RESTING (1 segundo) - THINKING (1.5 segundos) Cada mudança de estado deve ser impressa com timestamp: `[timestamp] Worker X is WORKING` **Monitor thread**: Verifica se algum worker está no mesmo estado há mais de 3 segundos. Se sim, imprime: `[timestamp] WARNING: Worker X stuck in STATE` **Uso**: `./state_monitor` **Hint**: Use enums para os estados. O monitor thread simula a verificação de morte no Philosophers, tens de verificar continuamente sem interferir com os workers. Usa mutex para proteger o acesso aos estados.