其他分享
首页 > 其他分享> > c-pthread取消成功,但是在几百个线程后无法创建线程

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