Насколько неточной может быть функция uspp для cpp?

Я хочу измерить, насколько неточным может быть сон. Я имею в виду, если я напишу в своей программе usleep(5000), какое максимальное время будет спать?

заранее спасибо

2 ответа

Если у вас нет ядра RTOS, максимальное время - навсегда.

usleep (или же nanosleep или любой другой режим ожидания) гарантирует ожидание, по крайней мере, столько времени, сколько вы скажете, с округлением до степени детализации системного таймера, если только сигнал не перехвачен. Вы знаете, произошел ли сигнал от возвращаемого значения.

По истечении этого времени ваш поток будет готов к запуску и, в конце концов, снова будет запущен по усмотрению планировщика. В зависимости от тысячи факторов, которые вы не знаете, это может быть следующая наносекунда или через 5 минут, или никогда.

usleep в современных системах Linux использует nanosleep системный вызов, поэтому он не страдает от проблем, связанных с сигналом более старых реализаций. С другой стороны, это все еще зависит от разрешения таймера вашей системы, которое зависит от ядра и оборудования.

Тем не менее, из usleep страница справочника:

POSIX.1-2001 объявляет эту функцию устаревшей; вместо этого используйте nanosleep(2). POSIX.1-2008 удаляет спецификацию usleep().

Другие вопросы по тегам