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 --------------------------------------------------------------------------- Create a program with 3 "worker" threads and 1 "monitor" thread: Worker threads: Each thread alternates between 3 states: - WORKING (2 seconds) - RESTING (1 second) - THINKING (1.5 seconds) Each state change should be printed with timestamp: `[timestamp] Worker X is WORKING` Monitor thread: Checks if any worker has been in the same state for more than 3 seconds. If so, prints: `[timestamp] WARNING: Worker X stuck in STATE` Usage: `./state_monitor` Hint: Use enums for the states. The monitor thread simulates death checking in Philosophers, you need to check continuously without interfering with workers. Use mutex to protect access to states.