函数 sleep() 是主动还是被动?

问题描述 投票:0回答:3

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

既然它停止线程运行,它是否总是检查时间是否已经过去,例如:

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

或者被动语态,例如:

alarm(sec);

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

系统是unix。

c operating-system system sleep system-calls
3个回答
5
投票

sleep
不是 标准 C 库函数。

如果您的平台有它,它几乎肯定会调用操作系统来挂起线程(即,用您的表示法,passive)。

它不会采用

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


1
投票

有两种通用方法来实现 sleep() 函数。

一种是使用

alarm()
函数来调度 SIGALRM 信号,然后挂起等待该信号的调用线程。另一种是建立独立的设施。

函数

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


1
投票

sleep()
标准 POSIX 函数:

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

...

© www.soinside.com 2019 - 2024. All rights reserved.