На моей man-странице написано:
unsigned int sleep(unsigned int seconds);
DESCRIPTION
sleep() makes the calling thread sleep until seconds seconds have
elapsed or a signal arrives which is not ignored.
...
RETURN VALUE
Zero if the requested time has elapsed, or the number of seconds left
to sleep, if the call was interrupted by a signal handler.
так что sleep заставляет поток спать, пока вы говорите, но сигнал пробуждает его. Я не вижу дальнейших гарантий.
если вам нужно лучшее, более точное время ожидания, то сон не достаточно хорош. Существует nanosleep и (звучит смешно, но это правда) select - это единственный способ посси-переносить сон в течение секунды (или с более высокой точностью), который я знаю.