24 lines
1.0 KiB
Plaintext
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.
|