函数sleep()是否在被动状态下激活?

时间:2016-06-01 09:59:54

标签: c operating-system system sleep system-calls

C中的函数sleep()是主动等待还是被动等待?

因为它会停止线程运行,所以它总是检查时间是否已经过去了:

while(1){
//need to wake?
}

或者像被动者一样被动:

alarm(sec);

pause(); // wait for the alarm and sleeping?

系统是unix。

3 个答案:

答案 0 :(得分:5)

sleep 标准C库函数。

如果您的平台拥有它,它几乎肯定会调用操作系统来暂停该线程(即,在您的符号中,被动)。

它不会采用while(1){}类型的习惯用法,因为这会不必要地烧掉CPU。

答案 1 :(得分:1)

实现sleep()功能有两种通用方法。

一种方法是使用alarm()函数来调度 SIGALRM 信号,然后暂停等待该信号的调用线程。另一个是实施独立设施。

函数sleep()在unix中处于被动等待状态。

答案 2 :(得分:1)

sleep()standard POSIX function

  

sleep()函数将导致调用线程被挂起   从执行直到指定的实时秒数   通过参数秒已经过去或信号被传递给   调用线程及其动作是调用信号捕获函数   或终止该过程。暂停时间可能比   由于系统安排了其他活动而请求。

     

...