C++ 怎样回收线程,。。。 5C

我想实现一个线程池。想到这样一个问题,一个线程被创建以后自动运行,运行结束后自动释放。
比如下面代码中的t运行结束后就释放掉了。那么怎样实现对一个线程的二次使用呢,就比如下面的t运行一次后不要自动释放,重新回收后可以为我执行别的任务。

void fun()
{
cout<<"thread"<<endl ;
}

void main()
{
thread t(fun) ;
t.detach() ;
//t.join();
return ;
}

0

8个回答

真正的线程池不会反复的创建,结束线程。
为了资源的重复利用,反复创建线程也会需要消耗系统资源的, 线程池一般是一开始就预留的创建几个线程。比如4个。然后会有一些任务队列,当你需要进行任务处理的时候,就把任务push到这个队列。线程池中的线程就会像消费者一样,从队列中pop出任务来进行处理,当队列中没有任务的时候,线程池的线程就阻塞等待等。因而线程池中一般会有condition_variable+信号量等方式来进行同步

1
qq_33707711
Mr-Luer 赋值粘贴可耻!
一年多之前 回复
0
Hei_po2
Hei_po2 正的线程池不会反复的创建,结束线程。 为了资源的重复利用,反复创建线程也会需要消耗系统资源的, 线程池一般是一开始就预留的创建几个线程。比如4个。然后会有一些任务队列,当你需要进行任务处理的时候,就把任务push到这个队列。线程池中的线程就会像消费者一样,从队列中pop出任务来进行处理,当队列中没有任务的时候,线程池的线程就阻塞等待等。因而线程池中一般会有condition_variable+信号量等方式来进行同步
一年多之前 回复
qq_33707711
Mr-Luer 这些我看过,过于冗长而且也没说明白我想知道的,而且有些是linux下的。
一年多之前 回复

真正的线程池不会反复的创建,结束线程。
为了资源的重复利用,反复创建线程也会需要消耗系统资源的, 线程池一般是一开始就预留的创建几个线程。比如4个。然后会有一些任务队列,当你需要进行任务处理的时候,就把任务push到这个队列。线程池中的线程就会像消费者一样,从队列中pop出任务来进行处理,当队列中没有任务的时候,线程池的线程就阻塞等待等。因而线程池中一般会有condition_variable+信号量等方式来进行同步

0

可以通过异步消息机制,在子线程建立消息环进行“顺序”处理(这需要根据你的实际业务需求来决定)或者每次开启单独的子线程;如果你描述的是偶尔发生的情况,那么怎么处理都是可以的(只要不是同步线程),如果情况是频繁发生甚至一直这样,那么你应该调整你的业务逻辑。

0

你这种用法是无法回收的。

0

线程退出后就释放,若再使用就有问题了。一般线程池中线程创建后就一直存在不退出的,如楼上所说当前任务执行完后,如果没有任务则线程进入阻塞状态直到新的任务到来。

0

先前写的一片文章,希望对你有帮助
http://blog.csdn.net/qq_30145355/article/details/78481583

0

不要释放它即可,完成任务以后,进入Wait状态即可,用事件或者其它内核对象~

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
【IO进程】Linux C中回收线程资源的方法
问题描述在写网络服务器程序时可能需要实现多线程接收多个客户端的数据,可以在一个循环中调用accept等待client的connect,connect之后创建thread,这样其实有一个问题,服务器程序需要长期运行,长时间线程的创建,线程资源的回收就是一个问题。Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的。而默认的条件下,一个线程结束后,其对应的资源不会被释放
CC++应用篇(004) 01_4线程的停止与回收
1、线程的停止 线程的停止:当return语句被执行时,表示该线程正常退出。 int Routine() { printf(&quot;do something \n&quot;); return 0; // 线程的主函数退出 } return语句被执行、Routine()返回、线程退出 实例中如果没有getchar()则在main()函数中,执行后直接退出,即主线程退出,则我们创建的线程没...
linux线程资源回收方法
Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的。而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线程又默认的退出,则最终线程资源耗尽,进程将不再能建立新的线程。 解决这个问题,有2种方式,系统自动释放线程资源,或者由另一个线程释放该线程资源。 注意,在这里,我认为进程运行后,本身,也是一个线程,主线
linux c语言 线程资源释放
最近做了多线程并发网络编程的时候出现了一个问题。程序在运行的过程中,占用的内存会越来越大。起初我怀疑是程序有指针没有被free,导致内存泄漏。后来通过调试才发现, 原来是线程结束之后, 线程的资源没有得到释放。 Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的。而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线
C语言 线程创建与销毁基础接口(Windows & Linux)
Linux篇 创建线程: int pthread_create( pthread_t *tidp, //线程ID const pthread_attr_t *attr, //线程属性 (void*)(*start_rtn)(void*), //线程函数 void *arg);//传递给线程的参数 返回值: 成功-返回0 失败-返回错误码 线程属性 线...
pthread线程创建与回收
线程   进程是系统内部承担资源分配的基本单位,线程是系统内部调度的基本单位。进程强调资源独立,线程强调资源共享(线程栈独立)。线程的粒度更细相比于进程,所以多线程程序并发度更高,但更难于去管理 线程创建 int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(vo...
线程的停止与回收
A01-04  线程的停止和回收 线程停止:当return语句被执行时,表示线程正常退出。 int Routine() { printf("do something\n"); return 0; //线程的主函数退出 } return语句被执行,Routune()返回,线程退出 异常退出: ①当主线程退出的时候,所
【C语言】【unix c】进程资源的回收
【C语言】【unix c】进程资源的回收
避免僵尸线程:线程资源的回收与join、detach
#include &amp;lt;pthread.h&amp;gt;#include &amp;lt;stdio.h&amp;gt;void* __task(void*arg){ return (void*)0;}int main(int agrc, char**argv){ int i = 0; pthread_t pid = 0; int ret = 0; pthread_attr_t attr; for(i=0; i&amp;lt...
线程回收 未完待续
为什么要进行线程回收?当在activity中新建一个线程,如果activity destroy()的时候不对线程进行回收,就会发生内存泄漏。---&amp;gt;UI线程被结束掉,UI线程里面的子线程并没有被GCJava中线程是垃圾回收机制的根源,也就是说,在运行系统中DVM虚拟机总会使硬件持有运行状态的进程的引用,结果导致处于运行状态的线程将永远不会回收。因此你必须为你的后台线程实现销毁逻辑。如何对线程...
ThreadPoolExecutor 工作线程调度和回收
        ThreadPoolExecutor对任务的提交和异步执行已分析完毕,现在要补充一些关于它对线程池的管理,也就是对其工作线程的调度和回收.        还记得上一篇“ThreadPoolExecutor execute 方法分析”最后一个关于任务异步执行的流程图,虽然分支庞杂,但只有两个条逻辑路径会增加工作线程加入到线程池:一是当前线程池的大小&amp;lt;核心线程池大小(即...
JVM 线程无法回收排查 -- 实例
问题排查步骤: 1. jstack查看jvm线程信息,发现已经有1w+线程存在 2. 看命名规范:pool-11238-thread-1大量存在,且处于waiting状态,由此可以猜测代码中存在一种ThreadPoolExecutor调用,coresize设置为1的地方每次调用完没有回收 3. 登录服务器,jmap -dump 文件,下载至本地 4. 使用jvisualvm工具查看dump...
线程退出和线程资源回收问题
最近项目中遇到循环8M的内存泄漏问题,排查后发现是由于特殊场景下使子线程异常退出,主线程发现子线程退出便再次创建线程,此时未回收退出线程的资源造成了内存泄漏,导致数据库宿主机oom,此问题不仅导致内存泄漏,还会使线程句柄用完导致其他进程无法分配线程的风险。 下面来看看关于线程退出和线程资源回收的有关问题 线程退出有多种方式,如return,pthread_exit,pthread_ca
java线程池线程回收
注意: 一定要将线程回收,否则程序会一直等待!! 也可以关闭线程池,来退出程序,但是这样会导致新的任务无法执行!! 线程回收之后,有新的任务到来就会自动新建线程。 class Task implements Runnable { private int x; //线程编号 public Task(int x) { this.x = x;
线程退出的几种方式和资源回收及设置线程属性
from:http://blog.chinaunix.net/uid-29924858-id-4603600.html  线程退出油多种方式,如return,pthread_exit,pthread_cancel等;线程分为可结合的(joinable)和 分离的(detached)两种,如果没有在创建线程时设置线程的属性为PTHREAD_CREATE_DETACHED,则线程默认是可结合的。
线程退出与资源回收
线程退出 单个线程可以通过3种方式退出,因此可以在不终止整个进程的情况下,停止它的控制流。 1)线程可以简单地从启动历程中返回,返回值是线程的退出码。 2)线程可以被统一进程中的其他线程所取消。 3)线程调用pthread_exit。 #include &amp;amp;lt;pthread.h&amp;amp;gt; void pthread_exit(void *rval_ptr); rval_ptr参数是一...
ThreadPoolExecutor线程池如何实现计时回收空闲线程
疑惑 说到线程池,其实已经看过很多遍源码,不过大多是复用和阻塞队列获取时的部分,今天突然想到,线程池有个最大空闲时间,即空闲线程最大存活时间,我想知道怎么实现计时的,难道是每一个worker类中一个计时器吗? 解惑 找了很多博客,都没有找到,只能自己在源码里找了,意外地好找,因为用到keepAliveTime这个变量,整个ThreadPoolExecutor.java中只有一个方法,只看这个方法就...
linux多线程结束时,回收子进程问题
当已经有SIGCHLD信号时,我们调用waitpid是可以立即返回的。所以经常在SIGCHLD处理程序中调用waitpid函数,这样就可以期望他总能立即返回,但是如果在执行SIGCHLD处理程序期间又有子进程终止,因为unix不对信号排队,如果多于一个子进程终止,则会导致信号丢失,在这种情况下,如果只调用一次waitpid就会导致僵死进程的产生,可以采取while(waitpid(-1,0,WNO
System.gc与finalize以及Thread对象何时被回收
System.gc()建议JVM进行一次垃圾回收。垃圾对象在被回收之前,其finalize方法会被JVM自动调用,用于做一些清除工作。简单地说,调用了System.gc()之后,java在内存回收过程中就会调用那些要被回收的对象的 finalize() 方法。 下面看一个例子。 User:package com.zzj.gc; public class User { private S
linux线程资源回收的问题(虚拟内存)
本文转自 http://luckywhu.blog.163.com/blog/static/184077944201272162239405/ 程序在长时间压力测试之后发生core,检查core文件的堆栈,发现最后失败的地方是C++里面对new的调用。 部分堆栈如下 (gdb) bt #0 0x000000302af69447 in _int_malloc ()
程序退到后台的时候,所有线程被挂起,系统回收所有的socket资源问题及解决方案
工程中使用tcp长连接来和服务端进行数据传输,在IOS平台上,由于苹果的后台机制,会有以下问题:当程序退到后台的时候,所有线程被挂起,系统会回收所有的socket资源,那么socket连接就会被关闭,因此无法再进行数据的传输。当程序退到后台的时候,所有线程被挂起,系统会回收所有的socket资源,那么socket连接就会被关闭,因此无法再进行数据的传输。 实际测试时,开启后台定位的应用,当应用进入
Android 线程的销毁
Android 线程的销毁  (2011-10-30 09:52:17) 转载▼   分类: Android_SDK 在Android开发中,经常会用到线程和Timer,如果没有主动关闭它们,当程序结束时,线程并没有被销毁,而是一直在后台运行着,当我们重新启动应用时,又会重新启动一个线程,周而复始,你启动应用次数越多,开启的线程数就越多,你的机器就会变得越慢。还会导致意想不到的错误...
解决Java线程池任务执行完毕后线程回收问题
http://www.cnblogs.com/pengineer/p/5011965.html       对于经常使用第三方框架进行web开发的程序员来说,Java线程池理所应当是非常智能的,线程的生命周期应该完全由Java本身控制,我们要做的就是添加任务和执行任务。但是,最近做文档批量上传同步时发现线程池中的所有任务执行完毕后,线程并没有停止,然后做了一个测试,发现确实如此:   问题及
线程的创建,回收,取消
线程创建  int pthread_create(pthread_t *th, const pthread_attr_t *attr,void *(*start_routine) (void *), void *arg);    参数一:输出型参数,相当于线程号,指向线程标识符的指针    参数二:用来设置线程属性    参数三:输入型参数,线程运行函数的地址    参数四:运行函...
android启动线程后需要手动释放,系统不回收的线程
1. ThreadPool:必须主动销毁,不然所有线程均还存在; 2. HandlerThread:如果是自己new出来的, 必须主动销毁,不然线程均还存在; 3. GlSurfaceView: 必须主动调用release,不然线程会存在 不会有线程泄露的有: 1. new Thread():如果内部没有while死循环, 已经结束的; 不用主动回收;...
进程退出后,malloc分配的资源会被系统回收
当进程退出时,会释放进程的所用资源(进程分配的内存,打开的套接字,用户malloc资源) 这一步是有操作系统完成的, malloc内存泄露是指在一个进程中malloc了内存没有free,在进程结束前,这段内存都是被占用的。
说一说线程池对象的回收
一、引子   现在的业务开发中用到了ReactNative,热更新的代码下发使用的是GeckoClient框架。之前开发同学的实现是在Rn的基类Fragment和Activity中,创建一个GeckoClient成员变量,然后进行更新。这样,每个Rn的Fragment和Activity都有一个自己的GeckoClient实例,而GeckoClient中又有一个执行异步任务的线程池变量,而Rn的F...
Java线程池任务执行完毕后回收线程
Java线程池任务执行完毕后回收线程 线程池中的所有任务执行完毕后,线程并没有停止,导致JVM出现OOM问题。后来查找了下面链接的资料,解决问题。 ref: http://www.cnblogs.com/pengineer/p/5011965.html 问题及现象: public static void main(String[] args) { BlockingQueue queu...
线程池(ThreadPoolExecutor)源码分析之如何保证核心线程不被销毁的
今天看到了别人的一个代码,为了实现每小时重启一下MQ拉取消息,他使用的是Thread.sleep(1000*60*60)方法,然后重启MQ。我一看到就非常头疼啊。。为什么要使用这种方式而不使用java的线程池呢?于是我就问他,他说当时为了方便。大家都知道Thread.sleep期间是不会释放共享资源的,会造成死锁现象。然后我就想Thread.sleep可以在睡觉过程中等待被interrupt中断,然
疑问线程对象Thread启动之后,没有任何引用引用这个Thread对象,是否会被GC回收掉
public class MyRunnable implement Runnable{    public void run(){        while(true){           System.out.println("Hello");        }   }  public static void main(String[] args) {          new
关于C++11多线程的资源回收问题
关于C++11多线程的资源回收问题,请教各位大神 今天工作时遇到个多线程的问题, 程序启动时,std::Thread 开启了一个线程,线程里有new一些内存块,然后有一个while循环,循环里有一个http的请求数据的操作,每次如果有HTTP请求的话都会暂时阻塞线程5s,但是这个时候我关闭客户端的话,需要通知线程里的while跳出,然后再delete线程一开始分配的内存和线程资源回收,然后在退出程...
线程创建未回收导致的内存泄漏问题(进程中的堆栈内存,并不是malloc出来的内存)
转载自 http://blog.chinaunix.net/uid-1877180-id-303431.html 默认情况下 pthread_create 创建的线程是 joinable的 也就是即便pthread线程退出以后,退出状态也不会释放,这时候,如果一直创建的话,就会出现问题。 我遇到的就是 pthread_create 返回的 thread id 跟上一次调用时候
netty5.0的任务线程无法回收的问题
在最近的项目的运用了netty5.0,之后就发现过两天tomcat就莫名的内存消耗增大,或者直接就进程死掉了。 跟踪了很久发现是netty5在任务线程组里面很多的没有进行回收,然后又创建了很多新的任务线程。但也不是一次性就创建了很多,慢慢的增加的。 通过VisualVM追踪发现很多的nioEventLoopGroup线程,而且很明显的使用中线程不会增加,但是闲下来了,慢慢就会增加。非常奇怪,应
Android Activity 销毁后线程会不会被GC回收?
Android Activity 销毁后线程会不会被GC回收?曾想当然地认为页面被finish之后线程会被android 虚拟机的垃圾回收机制回收掉。 于是用页面跳转做测试测试代码public class MainActivity extends Activity { Timer timer = new Timer(); @Override public void onCre
Windows线程创建、退出及资源释放
可以通过以下几种方法创建一个线程: 1、CreateThread 2、_beginthread 3、_beginthreadex 4、AfxBeginThread -------------------------------------------------------------------------------------- 1、CreateThread 函数原型
线程池为什么能维持线程不释放,随时运行各种任务?
线程池 之前一直有这个疑问:我们平时使用线程都是各种new Thread(),然后直接在run()方法里面执行我们要做的各种操作,使用完后需要做什么管理吗?线程池为什么能维持住核心线程不释放,一直接收任务进行处理呢? 线程 线程无他,主要有两个方法,我们先看看start()方法介绍: /** * Causes this thread to begin execution;
嵌入式Linux并发程序设计,线程,线程概念、特点、共享/私有资源,创建线程pthread_create()/回收线程pthread_join()/结束线程pthread_exit()
文章目录1,线程概念2,线程特点3,线程共享资源--私有资源4,Linux线程库--pthread线程库中提供了如下基本操作a,创建线程pthread_create()b,回收线程pthread_join()c,结束线程pthread_exit()5,线程示例 1,线程概念 进程 线程 ·进程有独立的地址空间 ·Li...
线程池中的空余线程是如何被回收的
首先要知道在线程池中空余线程被回收的条件:当线程池中的线程数量大于 corePoolSize 的时候,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,而是会等待,直到等待的时间超过 keepAliveTime。 文章地址: https://mp.weixin.qq.com/s?__biz=MzU1OTgyMDc3Mg==&amp;mid=2247483834&amp;idx=1&amp;s...
回收子进程函数waitpid详解
这里我们可以看出:当已经有SIGCHLD信号时,我们调用waitpid是可以立即返回的。所以经常在SIGCHLD处理程序中调用waitpid函数,这样就可以期望他总能立即返回,但是如果在执行SIGCHLD处理程序期间又有子进程终止,因为unix不对信号排队,如果多于一个子进程终止,则会导致信号丢失,在这种情况下,如果只调用一次waitpid就会导致僵死进程的产生,可以采取while(waitpid
线程退出的几种方式和资源回收【线程编程中避免内存泄漏】
线程退出油多种方式,如return,pthread_exit,pthread_cancel等;线程分为可结合的(joinable)和 分离的(detached)两种,如果没有在创建线程时设置线程的属性为PTHREAD_CREATE_DETACHED,则线程默认是可结合的。可结合的线程在线程退出后不会立即释放资源,必须要调用pthread_join来显式的结束线程。分离的线程在线程退出时系统会自动回...
文章热词 机器学习教程 Objective-C培训 交互设计视频教程 颜色模型 设计制作学习
相关热词 mysql关联查询两次本表 native底部 react extjs glyph 图标 怎样学python 学习java线程