我是靠谱客的博主 友好自行车,最近开发中收集的这篇文章主要介绍C++实现的带最大最小线程数的线程池(基于ACE),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

最近需要一个能根据请求数变化的线程池,JAVA有这样的东西,可是C++下好像一般只是固定大小的线程池。所以就基于ACE写了个,只做了初步测试。

主要思想是:

1. 重载ACE_Task,这相当于是个固定线程池,用一个信号量(ACE_Thread_Semaphore)来记数空闲线程数。

2. 初始化时根据用户的输入,确定最少线程数minnum和最大线程数maxnum,当多个请求到来,并且无空闲线程(信号量用光),判断总线程数小于maxnum,就开始强迫增加线程数。

3. 当线程响应完一个请求(任务)后,如果当前任务队列为空,且线程数大于minnum,就退出本线程。这里做了一个优化,就算满足条件,线程也会在队列上再等待10秒,防止线程池抖动带来不必要的开销。

使用:

重载这个类,重载service_func函数实现自己的任务处理。

start_pool初始化线程池,之后,就可以用add_task向线程池添加任务。

它会根据请求的数量自动控制池大小进行处理。

已经在LINUX下测试通过。由于ACE是跨平台的,所以这个实现也应该可以在WINDOWS下工作。

编译:

带THREAD_POOL_UNIT_TEST选项,则编译出自测程序test

gcc -g -Wall -O2 -g -Wall -I. -I../ -I../mon/comm/ACE_wrappers -g -DTHREAD_POOL_UNIT_TEST -o test thread_pool.cpp -lpthread -lm -lz -lstdc++ ../mon/comm/ACE_wrappers/ace/libACE.a -ldl

thread_pool.h头文件:

最后

以上就是友好自行车为你收集整理的C++实现的带最大最小线程数的线程池(基于ACE)的全部内容,希望文章能够帮你解决C++实现的带最大最小线程数的线程池(基于ACE)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部