LinuxSir.cn,穿越时空的Linuxsir!

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

Linux下线程的切换问题

[复制链接]
发表于 2006-5-18 10:53:42 | 显示全部楼层 |阅读模式
在同一进程下创建两个工作县城,然后让他们并发运行。两个工作线程都很简单,做类似于下面代码的输出:
    for(int i=0;i<100;i++)
           printf("work thread 1:%d\n",i)
结果发现线程2在线程1执行完后在执行。而同样类似的代码在windows下面则发现两个线程是交替执行的。
Linux对线程的支持就近到什么地步?难道是伪线程?
如果将上边的代码改称下面这个样子:
   for(int i=0;i<100;i++)
    {
         printf("work thread 1:%d\n",i);
         sleep(1);
    }
则发现两个线程是交替执行的。

哪位高手给解释一下
发表于 2006-5-18 11:23:31 | 显示全部楼层
为什么偏要是交替的你才认为合适?
回复 支持 反对

使用道具 举报

发表于 2006-5-18 11:39:24 | 显示全部楼层
linux下每个线程分到时间片一般是10ms左右,足够100次printf了啊.windows下如何调度搞不清楚.不过linux下线程可不是伪线程.你把循环次数弄多点就知道了.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-18 13:49:23 | 显示全部楼层
为什么偏要是交替的你才认为合适?

如果各个线程之间不是交替运行的,那设成多线程还有何意义?
你把循环次数弄多点就知道了.

循环10000此也是这样,测试过了
回复 支持 反对

使用道具 举报

发表于 2006-5-18 14:02:54 | 显示全部楼层
你为何认为输出不是交替的,线程就不是交替的?

printf有行缓冲,要用到全局变量,线程方面肯定会有所考虑,用fprintf(stderr会更好一点,但仍然不能精确说明问题。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-18 15:23:05 | 显示全部楼层
不好意思,当循环10000的时候可以发现两个线程的输出是交替的。
回复 支持 反对

使用道具 举报

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

本版积分规则

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