请问:关于linux多线程编程的一个有关问题——多线程等待
请教:关于linux多线程编程的一个问题——多线程等待情况大致是这样的:现在进行HTTP请求(GET),然后进行接收,
请教:关于linux多线程编程的一个问题——多线程等待
情况大致是这样的:现在进行HTTP请求(GET),然后进行接收,我是一个线程对应一个请求,即一个线程负责发送请求,然后进行接收,除HTTP头部的部分,写入到文件中。我的代码结构是这样的:
C/C++ codewhile(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(),这样即使主线程退出了,进程也不会立刻结束,等进程中的所有线程都结束了,进程结束