pthread取消成功,但在线程的100个后无法创建线程

pthread cancel is successful but failing to create thread after few 100's of thread

本文关键字:线程 100个 创建 pthread 成功 取消      更新时间:2023-10-16

这里 pthread 不是在 1013 个线程之后创建的。我知道每个进程的线程创建都有限制,但在这里我取消了线程,并且在线程中我也调用了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. 取消线程后对线程执行pthread_join(),这将等待线程实际终止,并允许您返回返回值。
  2. 创建后使用 pthread_detach() 分离线程,或者通过创建处于分离状态的线程来分离线程(。线程结束时会自动清理已分离线程的资源,但它不允许你返回返回值。