关于sleep问题

lxslove 2010-09-15 12:52:06
查看手册,sleep函数是让进程睡眠一段时间,但我发现,貌似sleep函数是让线程睡眠一段时间才对。
究竟sleep是针对进程的还是针对线程的啊?
sleep描述:
SLEEP(3) Linux Programmer's Manual SLEEP(3)

NAME
sleep - Sleep for the specified number of seconds

SYNOPSIS
#include <unistd.h>

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 <pthread.h>
#include <stdio.h>
#include <unistd.h>
void * pf(void *param)
{
while (true)
{
printf("tf\n");
}

}

int main()
{
pthread_t pid;
pthread_create(&pid, NULL, &pf, NULL);
while(1)
{
sleep(10);
}
return 0;
}
...全文
82 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxslove 2010-09-16
  • 打赏
  • 举报
回复
明白了,谢谢
谭海燕 2010-09-15
  • 打赏
  • 举报
回复
的确.sleep()可以用于线程,一个线程调用sleep()只能保证当前调用sleep()的线程睡眠,其他线程可以得到调度.

在linux内核中,线程使用一个和父进程共享数据的轻量级进程来表示的,并将这个轻量级进程同用户空间的线程进

行关联.这样,线程是可以被单独调度的.

当调用sleep()的时候,只有调用sleep()的线程得到了睡眠.其他线程任然可以得到调度的.

2,161

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 UNIX文化
社区管理员
  • UNIX文化社区
  • 文天大人
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧