Ren*_*uka 3 c++ linux pthreads
这里 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?
}
}
Run Code Online (Sandbox Code Playgroud)
通过取消线程,您只是停止了线程 - 但系统仍然保留其资源。由于可用的线程资源数量有限,最终您将达到无法创建更多线程的限制。
要清理线程资源,您需要:
pthread_join()操作,这将等待线程实际终止,并且还允许您取回返回值。pthread_detach()在创建后或通过创建处于分离状态的线程来分离线程)。当线程结束时,分离线程的资源会自动清理,但它不允许您取回返回值。| 归档时间: |
|
| 查看次数: |
838 次 |
| 最近记录: |