日期:2014-05-16  浏览次数:20538 次

关于多线程编程的一个问题
有如下代码:
#include<stdio.h>
#include<pthread.h>
void handle()
{
int i;
for(i=0;i<10;i++)
printf("123\n");
}

int main()
{
pthread_t id;
int i;
int ret;
ret=pthread_create(&id,NULL,(void*)handle,NULL);
if(ret!=0)
{
printf("error!\n");
exit(1);
}
for(i=0;i<63335;i++)
printf("abc\n");
pthread_join(id,NULL);
return(0);
}
运行该程序之后,输出的结果一直是:先输出65535个“abc”,然后输出10个“123”。并没有实现线程抢占CPU资源的现象,请问为什么出现这种情况?

------解决方案--------------------
进程的运行时间都是由系统合理的分配的,你上面最多两个线程,当然不会抢占太多CPU资源的;可以可以建立65535进程试试看:)
改用fork()
------解决方案--------------------
你把for(i=0;i <10;i++)这句改成for(i=0;i<10000;i++)再试一次就可以看到抢占线程咯!
------解决方案--------------------
因为
for(i=0;i <63335;i++) 
printf("abc\n"); 
这个时间其实是很短暂的,在这么短的时间内发生抢占现象有可能,但是几率较小,你可以在循环中通过延时或计算时间较长的操作,这会加大抢占现象发生的概率。
------解决方案--------------------
要切换线程啊,主线程自己sleep(0)一下吧