2 qq 33707711 qq_33707711 于 2018.01.01 23:33 提问

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

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

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

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

8个回答

caozhy
caozhy   Ds   Rxr 2018.01.01 23:38
Hei_po2
Hei_po2 正的线程池不会反复的创建,结束线程。 为了资源的重复利用,反复创建线程也会需要消耗系统资源的, 线程池一般是一开始就预留的创建几个线程。比如4个。然后会有一些任务队列,当你需要进行任务处理的时候,就把任务push到这个队列。线程池中的线程就会像消费者一样,从队列中pop出任务来进行处理,当队列中没有任务的时候,线程池的线程就阻塞等待等。因而线程池中一般会有condition_variable+信号量等方式来进行同步
6 个月之前 回复
qq_33707711
qq_33707711 这些我看过,过于冗长而且也没说明白我想知道的,而且有些是linux下的。
6 个月之前 回复
qq_41555389
qq_41555389   2018.01.02 12:06

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

JohnedJay
JohnedJay   2018.01.02 22:14

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

qq_33707711
qq_33707711 赋值粘贴可耻!
6 个月之前 回复
bowang_dayi
bowang_dayi   2018.01.06 00:20

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

qq_30145355
qq_30145355   2018.01.14 21:55

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

VisualEleven
VisualEleven   Ds   Rxr 2018.01.15 14:42

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

oyljerry
oyljerry   Ds   Rxr 2018.01.02 09:48

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

yshuise
yshuise   2018.01.02 13:40

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

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!