C 中的 sleep() 函数是主动等待还是被动等待?
既然它停止线程运行,它是否总是检查时间是否已经过去,例如:
while(1){
//need to wake?
}
或者被动语态,例如:
alarm(sec);
pause(); // wait for the alarm and sleeping?
系统是unix。
sleep
不是 标准 C 库函数。
如果您的平台有它,它几乎肯定会调用操作系统来挂起线程(即,用您的表示法,passive)。
它不会采用
while(1){}
类型的习惯用法,因为这会不必要地烧毁CPU。
有两种通用方法来实现 sleep() 函数。
一种是使用
alarm()
函数来调度 SIGALRM 信号,然后挂起等待该信号的调用线程。另一种是建立独立的设施。
函数
sleep()
在unix中处于被动等待状态。
sleep()
是标准 POSIX 函数:
函数将导致调用线程被挂起 从执行直到指定的实时秒数 通过参数秒数已经过去或信号被传递到 调用线程,它的动作是调用一个信号捕获函数 或终止该进程。暂停时间可能会长于 由于系统安排其他活动而请求。sleep()
...