首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2012-05-02 
请教:关于linux多线程编程的一个问题——多线程等待情况大致是这样的:现在进行HTTP请求(GET),然后进行接收,

请教:关于linux多线程编程的一个问题——多线程等待
情况大致是这样的:现在进行HTTP请求(GET),然后进行接收,我是一个线程对应一个请求,即一个线程负责发送请求,然后进行接收,除HTTP头部的部分,写入到文件中。我的代码结构是这样的:

C/C++ code
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]对应的线程结束了,这样会不会有什么影响呢??

[解决办法]
既然要轮循,那就维护好你的线程队列,用读写锁,每个线程到最后结束那一刻主动从线程队列移出自己。
另外,Linux 多进程不比多线程慢。
[解决办法]
应该叫线程表,不是队列。
[解决办法]
pthread_join(id[0]就是等待id[0]结束
[解决办法]
设置线程detached属性,这时线程是脱离线程,不许要使用join等待,线程结束了系统就会自动回收其资源。在主线成中使用无限循环,或者在主线成中使用pthread_exit(),这样即使主线程退出了,进程也不会立刻结束,等进程中的所有线程都结束了,进程结束

热点排行