LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 712|回复: 2

linux下的线程问题

[复制链接]
发表于 2005-9-23 10:59:00 | 显示全部楼层 |阅读模式
#include <stdio.h>
#include <pthread.h>
void thread(void)
{
while(1)
printf("B");
}
                                                                                
int main(void)
{
pthread_t id;
int ret;
ret=pthread_create(&id,NULL,(void *) thread,NULL);
if(ret!=0){
printf ("Create pthread error!\n");
exit (1);
}
while(1)
printf("A");
pthread_join(id,NULL);
return (0);
}
上面这个程序是用来验证线程的并发执行的,我在Redhat 9上试的,我发现屏幕上很少有AB分时间片交替出现,经常是这种情况,屏幕上A一直出现了好几分钟,然后B出现一会,然后A又出现了.感觉A,B出现的时间很不一样,这跟以前学操作系统时讲的原理完全不一样呀,哪位大哥能告诉我为什么呀?
发表于 2005-9-24 15:46:47 | 显示全部楼层
我这里没有这个问题, 你设置两个全局变量对线程的执行计数进行统计,在SIGINT中断时打印结果, 然后看看差多少?
我得出的几组如下
thr a exec:45709516 thr b exec:46666548 a-b:-957032
thr a exec:5584634 thr b exec:4839686 a-b:744948
thr a exec:9884254 thr b exec:9254306 a-b:629948
thr a exec:15588298 thr b exec:11730998 a-b:3857300
thr a exec:8137940 thr b exec:8201004 a-b:-63064
大约是同步的, 前后相差不过1%
回复 支持 反对

使用道具 举报

发表于 2005-9-24 19:46:50 | 显示全部楼层
这个很正常!
线程之间切换是很耗资源的,所以你就看到那种情况!

你如果在printf后sleep一下,就会看到你希望看到的轮循!

其实你之前看到的一串A,一串B,也是轮循!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表