Assignment name: precise_timing Expected files: precise_timing.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 as seguintes funções: - `long long get_current_time()` - retorna o tempo atual em milissegundos - `void precise_sleep(int ms)` - dorme por exatamente X milissegundos - `long long time_diff(long long start, long long end)` - calcula diferença entre tempos Cria um programa que testa estas funções: 1. Mede o tempo de início 2. Dorme por 100ms usando precise_sleep 3. Mede o tempo de fim 4. Imprime a diferença (deve ser ~100ms) Uso: `./precise_timing` Hint: gettimeofday() é crucial no projeto Philosophers. usleep() não é sempre preciso, por isso tens de verificar o tempo periodicamente. No Philosophers, o timing preciso é essencial para detectar mortes.