请教:关于linux多线程编程的一个问题——多线程等待

gfenghappy 2012-04-09 09:46:27
情况大致是这样的:现在进行HTTP请求(GET),然后进行接收,我是一个线程对应一个请求,即一个线程负责发送请求,然后进行接收,除HTTP头部的部分,写入到文件中。我的代码结构是这样的:
while(i<infohash_num)
{
pthread_t tid;
int rc=0;
if((rc=pthread_create(&tid,NULL,process_http,a[i]))!=0);
{
fprintf(stderr,"pthread_create failed!!!!!\n");
exit(0);
}
else
{
printf("创建线程 %d 成功,请求的 infohash 为:%s!!!\n",i,a[i]);
i++;
}
//sleep(5);
}

但是,我面临着一个问题,主程序如果提前结束了,那么线程也就结束了,我该怎么处理呢??让所有线程结束之后,主程序再结束,我知道有个函数pthread_join(),该函数可以等待一个线程结束。我的想法是:把建立的套接字的描述符放到一个数组里,当while循环结束之后,轮询套接字描述符数组id[](for循环),循环体为pthread_join()。。不知道这种方法行不行?但是,我还有个疑问:就是,当我轮询一个套接字描述符时,其他的线程结束了,这样对于这个有没有影响呢??也就是说,假如正在pthread_join(id[0],*)时候,描述符id[10]对应的线程结束了,这样会不会有什么影响呢??
...全文
355 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
ATH_SEG 2012-04-10
  • 打赏
  • 举报
回复
设置线程detached属性,这时线程是脱离线程,不许要使用join等待,线程结束了系统就会自动回收其资源。在主线成中使用无限循环,或者在主线成中使用pthread_exit(),这样即使主线程退出了,进程也不会立刻结束,等进程中的所有线程都结束了,进程结束
Lactoferrin 2012-04-10
  • 打赏
  • 举报
回复
pthread_join(id[0]就是等待id[0]结束
gfenghappy 2012-04-10
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
应该叫线程表,不是队列。
[/Quote]
请问,linux下多进程不比多线程慢,这话当怎么讲?是不是也是具体情况具体分析??
自由建客 2012-04-09
  • 打赏
  • 举报
回复
应该叫线程表,不是队列。
自由建客 2012-04-09
  • 打赏
  • 举报
回复
既然要轮循,那就维护好你的线程队列,用读写锁,每个线程到最后结束那一刻主动从线程队列移出自己。
另外,Linux 多进程不比多线程慢。

70,023

社区成员

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

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