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

多线程不交替执行问题
很短的一个程序,运行时发现总是在主线程(main函数)中的打印完成后,才能打印handle函数中的语句,为什么两个线程不是交替执行呢?
#include   <stdio.h>
#include   <pthread.h>

void   handle(void);

int   main(void)
{
      pthread_t   id;
      int   i;
      int   ret   =   0;
     
      ret   =   pthread_create(&id,NULL,(void   *)handle,NULL);
      if(ret   !=0)
        printf( "thread   create   err!!\n ");
      for(i   =   0;   i   <   1000;   i++)
      printf( "im   main\n ");

    pthread_join(id,NULL);
      return   0;
}

void   handle(void)
{
      int   i;
      for(i=0;i <10;i++)
          printf( "im   sub   thread!!\n ");
}  

运行结果:  
im   main
im   main
im   main
im   main
im   main
.
.
.
.
.
im   sub   thread
im   sub   thread
im   sub   thread
.
.

------解决方案--------------------
不可以将for(i = 0; i < 1000; i++)
改成usleep(...)吗?

------解决方案--------------------
循环太短了吧

2.4内核还是非抢占式的

只有主线程的时间片用完后才会切换cpu

你可以在循环中主动切换cpu,或者使用2.6内核看看
------解决方案--------------------
是太快了,你把主线程中加个sleep()就可以看到了。