Как убедиться, что nanosleep работает в моей системе в Linux

Я проверил, поддерживает ли моя система точность в микросекундах как сделать поддержка точности в наносекундах Используя таймер ускорения, я могу печатать текущее время с точностью до микросекунд Вывести текущее время в микросекундах

Теперь, когда я проверяю, работает nanosleep/usleep или нет, я запускаю эту программу.

Вот моя программа1

Print current time in microsec 
usleep(1); // sleep for 1 microsec
Print current time in microsec 

Вот мой вывод

01:43:38.799150
01:43:38.799393

Когда я запускаю эту программу2

struct timespec delay;
delay.tv_sec = 0;
delay.tv_nsec = 1000;

Print current time in microsec 
nanosleep(&delay, NULL);
Print current time in microsec 

Я получил этот вывод

01:48:25.919269
01:48:25.919838

Я ожидаю разницы в текущем времени всего в 1 микросекунду, тогда как на самом деле я получаю разницу более чем в 100 микросекунд. В чем причина?

Я сомневаюсь, правильно ли моя система выполняет usleep/nanosleep, хотя usleep(1) также косвенно вызывает nanosleep(1000)

Я использую g++, линукс. Любая помощь или понимание будут замечательными, и спасибо заранее.


person bholanath    schedule 08.04.2014    source источник
comment
Спать в любой современной многозадачной операционной системе не совсем точно. Вам гарантировано, что сон будет длиться по крайней мере столько времени, сколько вы запросили, но это все. Вы также должны учитывать время, необходимое для получения и печати временных меток.   -  person Some programmer dude    schedule 08.04.2014
comment
@JoachimPileborg Спасибо за ваш комментарий. Я проверил другой вариант - не печатать сразу, вместо этого перенаправить в поток и позже распечатать его. как std::ostringstream out; вне ‹‹ time_now(); спать(1); вне ‹‹ time_now(); std::cout‹‹out.str(); Также я отключил другое ядро, чтобы заставить его работать в наносекундах. Кстати, есть ли способ заставить мою систему давать наносекундную точность, по крайней мере, в течение наносекунд. Если возможно, ответьте на мой другой вопрос stackoverflow.com/questions/22503544/   -  person bholanath    schedule 08.04.2014