Linux下多线程问题,求大侠指教

zhuaibing 2007-07-25 11:17:17
问题如下:
有100个同样任务的队列,想用5个线程完成它

int x;

void* output( void* arg )
{
while(1) {

if (x >100) return NULL;
printf( "I am thread %d, Hello World! %d \n", pthread_self(),x++ );
sleep(3);
}
//return NULL;
}

int main( int argc, char** argv )
{
pthread_t tid[5] = { 0 };
int i = 0;
x=0;
for( i = 0; i < 5; i++ )
{
if( errno = pthread_create( tid + i, NULL, output, NULL ) )
{
fprintf( stderr, "failed to create thread: %s\n", strerror( errno ) );
return 1;
}
sleep(1); //时间设置不同结果运行不同
}

/*
for( i = 0; i < 5; i++ )
{
if( errno = pthread_join( tid[i], NULL ) )
{
fprintf( stderr, "failed to waite thread: %s\n", strerror( errno ) );
return 1;
}
}
*/
return 0;

}

编译运行结果如下:
I am thread 134558720, Hello World! 0
I am thread 134559232, Hello World! 1
I am thread 134558720, Hello World! 2
I am thread 134559744, Hello World! 3
I am thread 134559232, Hello World! 4
I am thread 134558720, Hello World! 5
I am thread 134560256, Hello World! 6
I am thread 134559744, Hello World! 7
I am thread 134559232, Hello World! 8
I am thread 134560768, Hello World! 9
I am thread 134558720, Hello World! 10
I am thread 134560256, Hello World! 11
I am thread 134559744, Hello World! 12


x还没到100,为什么就结束了啊,求大侠指教一下,谢谢!
...全文
204 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
softwarewander 2007-07-26
  • 打赏
  • 举报
回复
1楼的已经说清楚了, 你的主程序,都退出了, 当然就不可能看到hello word 100了

想要看到,最简单的就多让主程序sleep吧
jackyzhu_001 2007-07-26
  • 打赏
  • 举报
回复
主程序退出,线程也就不存在了,呵呵
........
int x;

void* output( void* arg )
{
while(1) {

if (x >20)
pthread_exit((void *)3);
//return NULL;
printf( "I am thread %d, Hello World! %d \n", pthread_self(),x++ );
sleep(3);
}
//return NULL;
}

int main( int argc, char** argv )
{
pthread_t tid[5] = { 0 };
int i = 0;
x=0;
void *tret[5];

for( i = 0; i < 5; i++ )
{
if( errno = pthread_create( tid + i, NULL, output, NULL ) )
{
fprintf( stderr, "failed to create thread: %s\n", strerror( errno ) );
//return 1;
}
sleep(1);
}


for( i = 0; i < 5; i++ )
{
if( errno = pthread_join( tid[i], &tret[i] ) )
{
fprintf( stderr, "failed to waite thread: %s\n", strerror( errno ) );
return 1;
}
}

int j=0;
while(1)
{

for(i=0;i<5;i++)
if((int)tret[i] == 3) { printf("thread %d exit \n",i);j++ ;};
if(j == 5) break;
sleep(1);
}
return 0;

}

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧