Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
我想测量睡眠的不准确程度。我的意思是,如果我在我的程序中写 usleep(5000) 睡眠的最长时间是多少?
提前致谢
除非你有一个 RTOS 内核,否则最长的时间是永远的。
usleep(或nanosleep任何睡眠)保证至少等待您告诉它的时间,四舍五入到系统计时器粒度,除非信号被捕获。您可以从返回值中知道是否发生了信号。
usleep
nanosleep
在那之后,您的线程将准备好运行,并且最终将由调度程序自行决定再次运行。根据您不知道的一千个因素,这可能是下一纳秒或 5 分钟,或者永远不会。
usleep在现代 Linux 系统上使用nanosleep系统调用,因此它不会受到旧实现的信号相关问题的影响。另一方面,它仍然受到系统计时器分辨率的影响,这是内核和硬件特定的。
也就是说,从usleep手册页:
POSIX.1-2001 声明此函数已过时;请改用 nanosleep(2)。POSIX.1-2008 删除了 usleep() 的规范。