免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3125 | 回复: 2
打印 上一主题 下一主题

关于HP-UX 10.20下多线程的问题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-08-31 10:20 |只看该作者 |倒序浏览
下面是测试程序的代码, 这段代码在hp平台下无法输出rt()函数中的信息,如果在main()函数中使用pthread_join()则会陷入死循环, 估计是系统时间片的问题,不知哪位高手可以帮忙解决.

#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>
#include <pthread.h>

void*
rt(void* data)
{
struct timeval to;
while(1)
{
to.tv_sec = 20;
to.tv_usec = 0;
if (select(0, 0, 0, 0, &to) == 0)
printf(\"Thread is running.\\n\");
}
return NULL;
}

void main()
{
struct timeval mto;
mto.tv_sec = 60;
mto.tv_usec = 0;
pthread_t pid;
pthread_create(&pid, 0, rt,0);
select(0, 0, 0, 0, &mto);
printf(\"main program is finished.\\n\");
}

论坛徽章:
0
2 [报告]
发表于 2006-08-31 21:47 |只看该作者
无法输出rt()函数中的信息原因:线程还没有运行到printf,主程序就退出了。
在main()函数中使用pthread_join()则会陷入死循环原因:线程程序没有退出——while(1)死循环。

论坛徽章:
0
3 [报告]
发表于 2006-09-01 09:02 |只看该作者
我把主程序等待的时间调长几倍,还是得不到rt()函数的输出,所以应该不是线程没执行到的问题,而是时间调度就根本没有给线程分配时间片.
另外,我在现成中需要一个死循环来检测,所以不能使用pthread_join,只能靠主程序结束整个进程,而且由于函数调用的关系,也不可以在主进程中显示地结束线程.
有什么办法可以手工调度hp机器的时间片?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP