philosophers_prep/4_state_monitor.txt

24 lines
1.0 KiB
Plaintext

**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.