pthread取消成功但在几十个线程之后无法创建线程

时间:2015-02-16 03:21:51

标签: c++ linux pthreads

这里没有在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?
    }
}

1 个答案:

答案 0 :(得分:4)

通过取消线程,您只是停止线程 - 但系统仍然保留其资源。由于只有有限数量的线程资源可用,因此最终您将无法创建更多线程。

要清理线程资源,您需要:

  1. 取消后在线程上执行pthread_join(),等待线程实际终止,并允许您返回返回值。
  2. 创建后使用pthread_detach()creating the thread in a detached state分隔线程。线程结束时会自动清除分离线程的资源,但它不允许您返回返回值。