在线程里面使用sleep函数是否会引起整个的进程都睡眠

linqzly 2008-06-03 03:54:56
看到有些文章里面写到:sleep函数是和进程相关的,所以当在线程里面使用sleep函数会引起整个的进程和其他的线程睡眠。但是我写了一个测试程序,在fedora5和fedora9下面运行好像sleep函数都只是影响自己线程的运行情况,而不会影响到主进程和其他进程的运行。
#include <stdio.h>
#include <pthread.h>
#include <unistd.h>

void printmsg()
{
while(1){
printf("test\n");
sleep(4);
}
}

void printms()
{
while(1){
printf("ms test\n");
sleep(1);
}
}

int main()
{
pthread_t tid0;
pthread_t tid1;

pthread_create(&tid0, NULL, (void *)printmsg, NULL);
pthread_create(&tid1, NULL, (void *)printms, NULL);

pthread_join(tid0, NULL);
pthread_join(tid1, NULL);
return 0;
}

如果按上面说的那样,那应该是在printmsg函数sleep 4 秒的时候ms test停止输出。
但是结果是:
每隔1秒输出ms test
每隔4秒输出test
sleep函数到底会不会让主进程和其他线程的也sleep的呢?
...全文
1445 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
fierygnu 2008-06-06
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 iec23801 的回复:]
sleep() makes the current process sleep until seconds seconds have elapsed or a signal arrives which is not ignored.
=======================
上面 这句话是POSIX上说明的.可以看出sleep()会影响整个进程.
[/Quote]

这是老POSIX。现在是这样的:
The sleep() function shall cause the calling thread to be suspended from execution until either the number of realtime seconds specified by the argument seconds has elapsed or a signal is delivered to the calling thread and its action is to invoke a signal-catching function or to terminate the process. The suspension time may be longer than requested due to the scheduling of other activity by the system.
lbaby 2008-06-06
  • 打赏
  • 举报
回复
呵呵,没试过
NC 2008-06-05
  • 打赏
  • 举报
回复 1
linux上的线程是用进程模拟的,所以。。。。。。。。
在solaris 或 bsd 系统中,在线程中sleep,是会引起整个进程的睡眠的。
yecheng_110 2008-06-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 sadgod 的回复:]
我实际测试过的。
遇到问题我习惯测试一下。而不去找权威的书籍验证。
[/Quote]
两者都需要的
悠悠长风 2008-06-04
  • 打赏
  • 举报
回复
linux下肯定不会,只会让线程sleep.
linqzly 2008-06-04
  • 打赏
  • 举报
回复
查了一下资料,好像是solaris上的是会引起进程睡眠,还有个专门为线程而设置睡眠的函数pthread_delay_np,但是fedora和一般其他的linux好像没有这个函数,有没有人可以证实一下呢?
威廉-丁 2008-06-04
  • 打赏
  • 举报
回复
mark
lxz2003 2008-06-04
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 悠悠长风 的回复:]
linux下肯定不会,只会让线程sleep.
[/Quote]
cceczjxy 2008-06-04
  • 打赏
  • 举报
回复
应该和使用的线程库有关。
lihua_1687 2008-06-03
  • 打赏
  • 举报
回复
关注中!!!
iec23801 2008-06-03
  • 打赏
  • 举报
回复
sleep() makes the current process sleep until seconds seconds have elapsed or a signal arrives which is not ignored.
=======================
上面 这句话是POSIX上说明的.可以看出sleep()会影响整个进程.
sadgod 2008-06-03
  • 打赏
  • 举报
回复
我实际测试过的。
遇到问题我习惯测试一下。而不去找权威的书籍验证。
linqzly 2008-06-03
  • 打赏
  • 举报
回复
上面的兄弟,可不可以找到权威一点的出处呢?谢谢
sadgod 2008-06-03
  • 打赏
  • 举报
回复
不会
线程的sleep只会让线程休眠

23,215

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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