当前位置: 技术问答>linux和unix
关于sleep问题
来源: 互联网 发布时间:2016-09-28
本文导语: 查看手册,sleep函数是让进程睡眠一段时间,但我发现,貌似sleep函数是让线程睡眠一段时间才对。 究竟sleep是针对进程的还是针对线程的啊? sleep描述: SLEEP(3) Linux Programmer's Manual ...
查看手册,sleep函数是让进程睡眠一段时间,但我发现,貌似sleep函数是让线程睡眠一段时间才对。
究竟sleep是针对进程的还是针对线程的啊?
sleep描述:
SLEEP(3) Linux Programmer's Manual SLEEP(3)
NAME
sleep - Sleep for the specified number of seconds
SYNOPSIS
#include
unsigned int sleep(unsigned int seconds);
DESCRIPTION
sleep() makes the current process sleep until seconds seconds have
elapsed or a signal arrives which is not ignored.
RETURN VALUE
Zero if the requested time has elapsed, or the number of seconds left
to sleep.
CONFORMING TO
POSIX.1
BUGS
sleep() may be implemented using SIGALRM; mixing calls to alarm() and
sleep() is a bad idea.
Using longjmp() from a signal handler or modifying the handling of
SIGALRM while sleeping will cause undefined results.
SEE ALSO
signal(2), alarm(2)
以下代码,会不断打印“tf", 说明sleep是针对线程的,跟描述不一致。
究竟sleep是针对进程的还是针对线程的啊?
sleep描述:
SLEEP(3) Linux Programmer's Manual SLEEP(3)
NAME
sleep - Sleep for the specified number of seconds
SYNOPSIS
#include
unsigned int sleep(unsigned int seconds);
DESCRIPTION
sleep() makes the current process sleep until seconds seconds have
elapsed or a signal arrives which is not ignored.
RETURN VALUE
Zero if the requested time has elapsed, or the number of seconds left
to sleep.
CONFORMING TO
POSIX.1
BUGS
sleep() may be implemented using SIGALRM; mixing calls to alarm() and
sleep() is a bad idea.
Using longjmp() from a signal handler or modifying the handling of
SIGALRM while sleeping will cause undefined results.
SEE ALSO
signal(2), alarm(2)
以下代码,会不断打印“tf", 说明sleep是针对线程的,跟描述不一致。
#include
#include
#include
void * pf(void *param)
{
while (true)
{
printf("tfn");
}
}
int main()
{
pthread_t pid;
pthread_create(&pid, NULL, &pf, NULL);
while(1)
{
sleep(10);
}
return 0;
}
|
的确.sleep()可以用于线程,一个线程调用sleep()只能保证当前调用sleep()的线程睡眠,其他线程可以得到调度.
在linux内核中,线程使用一个和父进程共享数据的轻量级进程来表示的,并将这个轻量级进程同用户空间的线程进
行关联.这样,线程是可以被单独调度的.
当调用sleep()的时候,只有调用sleep()的线程得到了睡眠.其他线程任然可以得到调度的.
在linux内核中,线程使用一个和父进程共享数据的轻量级进程来表示的,并将这个轻量级进程同用户空间的线程进
行关联.这样,线程是可以被单独调度的.
当调用sleep()的时候,只有调用sleep()的线程得到了睡眠.其他线程任然可以得到调度的.