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

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

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

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

参考

https://www.cnblogs.com/yangang92/p/5485868.html
https://www.cnblogs.com/lidabo/p/3321978.html
http://blog.csdn.net/shreck66/article/details/50412986

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

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

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

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

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

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

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