c-pthread取消成功,但是在几百个线程后无法创建线程
作者:互联网
在1013个线程之后,不会创建pthread.我知道每个进程的线程创建都有限制,但是在这里我取消了线程,并且在线程中我还调用了pthread_testcancel()作为取消点.其实这里发生了什么?有人可以帮助我纠正线程创建失败吗?我是多线程技术的新手,如果您向我提供详细说明,那就太好了.谢谢.
#include<iostream>
#include<pthread.h>
void* t(void*){
while(1){
pthread_testcancel(); //cancellation point?
}
}
main(){
pthread_t id;
int i = 0;
while(1){
++i;
if(pthread_create(&id, 0, t, 0)){
std::cout<<"\n failed to create "<<i; //approx get hit at i=1013
break;
}
if(pthread_cancel(id))
std::cout<<"\n i = "<<i; //not at al executes, pthread_cancell is always successful?
}
}
解决方法:
通过取消线程,您只是在停止线程-但系统仍在保留其资源.由于只有有限数量的线程资源可用,最终您将达到无法创建更多线程的极限.
要清理线程资源,您需要执行以下任一操作:
>取消线程后在线程上执行pthread_join()
,这将等待线程实际终止,并且还允许您获取返回值.
>创建后用pthread_detach()
或creating the thread in a detached state断开线程.线程结束时,分离线程的资源会自动清除,但不允许您获取返回值.
标签:pthreads,linux,c-4 来源: https://codeday.me/bug/20191028/1954125.html