Вы можете использовать clock_nanosleep
с флагом TIMER_ABSTIME
для работы с абсолютным временем вместо относительного времени вашего сна. Это позволит избежать проблем накопления ошибок и состояния гонки, когда ваша программа будет прервана, а другой процесс запланирован после получения текущего времени, но до вызова sleep.
В качестве альтернативы вы можете использовать таймеры POSIX (timer_create
) с обработчиком сигналов, где выбранный вами сигнал блокируется во всех потоках, кроме вашего, или с доставкой таймера в новом потоке, который сигнализирует переменную условия или семафор, которым ваш поток в ожидании.