pthread取消成功,但在线程的100个后无法创建线程
pthread cancel is successful but failing to create thread after few 100's of thread
这里 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?
}
}
通过取消线程,您只是停止线程 - 但系统仍在保留其资源。由于可用的线程资源数量有限,最终您将达到无法再创建任何线程的限制。
若要清理线程资源,需要执行以下任一操作:
- 取消线程后对线程执行
pthread_join()
,这将等待线程实际终止,并允许您返回返回值。 - 创建后使用
pthread_detach()
分离线程,或者通过创建处于分离状态的线程来分离线程(。线程结束时会自动清理已分离线程的资源,但它不允许你返回返回值。
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- 用于矢量处理的多个线程
- 如何在多个线程中创建 QSql数据库连接时防止名称冲突
- 如何声明由多个线程调用的 C++ DLL 的内部类,而无需导出类
- 在两个线程上读/写 64 位,无互斥/锁定/原子
- 自 Windows 10 20H1 以来,具有单独线程的多个窗口停止工作
- ASIO signal_set多个 IO 线程不可靠,具体取决于代码顺序?
- 将 10 个线程与原子布尔值同步
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- C++线程安全:如果只有一个线程可以写入非原子变量,但多个线程从中读取. 会遇到问题吗?
- C++:在多个线程中访问同一数组/向量的不同单元格是否会产生数据竞赛?
- 一个线程等待多个线程事件
- 如何在没有同步的情况下使用多个线程(2、4,8、16 个线程)在循环(10,100、1000 个周期)中打印字符串?
- 在C++中创建 100 个线程
- Qt 线程两个参数
- pthread取消成功,但在线程的100个后无法创建线程
- 我们是否需要每个线程多个io_service用于具有单个接受器的线程 boost::asio 服务器
- C++11线程:多个线程正在等待一个条件变量
- 多线程两个功能使用openMP
- Boost asio和线程,如果我运行两个实例,我得到cpu在100%