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