96SEO 2026-02-19 22:10 14
3、线程池的启动2.4、线程池的停止2.5、线程的执行函数run()2.6、任务的运行函数2.7、等待所有线程结束三、测试线程池四、源码地址总结一、前言

decltype。
packaged_task。
make_shared。
mutex。
unique_lock。
notify_one。
future。
queue。
bind。
thread。
expireTime):_expireTime(expireTime){}int64_t
_expireTime0;//超时的绝对时间functionvoid()
getThreadNum(){unique_lockmutex
args)-futuredecltype(f(args...)){return
它是c里新增的最强大的特性之一它对参数进行了高度泛化它能表示0到任意个数、任意类型的参数
std::futuredecltype(f(args...))
std::futuredecltype(f(args...))返回future调用者可以通过future获取返回值
futuredecltype(f(args...)){//获取现在时间int64_t
expireTime(timeoutMs0)?0:TNOWMStimeoutMs;//
taskmake_sharedpackaged_taskretType()(bind(forwardF(f),forwardArgs(args)...));//
fPtrmake_sharedTaskFunc(expireTime);fPtr-_func[task](){(*task)();};unique_lockmutex
况再去notify_condition.notify_one();return
task-get_future();}protected:size_t
注意ZERO_ThreadPool::exec执行任务返回的是个future,
tpool.exec(std::bind(Test::test,
主要是设置线程池中线程的数量如果线程池已经存在则直接返回防止重复初始化。
lock(_mutex);if(!_threads.empty())return
根据设置的线程数量创建线程并保存在一个数组中。
如果线程池已经存在则直接返回防止重复启动。
lock(_mutex);if(!_threads.empty())return
i0;i_threadNum;i){_threads.push_back(new
thread(CPP_ThreadPool::run,this));}return
设置线程退出条件并通知所有线程。
停止时要等待所有线程都执行完任务再销毁线程。
注意要有这个{}不然会死锁。
{unique_lockmutex
lock(_mutex);_bTerminatetrue;_condition.notify_all();}size_t
thdCount_threads.size();for(size_t
i0;ithdCount;i){if(_threads[i]-joinable()){_threads[i]-join();}delete
_threads[i];_threads[i]NULL;}unique_lockmutex
读取任务判断任务是否存在如果任务队列为空则进入等待状态直到任务队列不为空或退出线程池这里需要两次判断因为可能存在虚假唤醒。
检测所有任务都是否执行完毕这里使用了原子变量来检测任务是否都执行完原因在于任务队列为空不代表任务已经执行完任务可能还在运行中、也可能是任务刚弹出还没运行使用原子变量来计数就更严谨。
CPP_ThreadPool::get(TaskFuncPtr
lock(_mutex);if(_tasks.empty())//判断任务是否存在{_condition.wait(lock,[this]{return
!_tasks.empty();//唤醒条件});}if(_bTerminate)return
false;if(!_tasks.empty())//判断任务是否存在{taskmove(_tasks.front());//
使用移动语义_tasks.pop();//弹出一个任务return
{while(!isTerminate()){TaskFuncPtr
okget(task);if(ok){_atomic;try{if(task-_expireTime!0
处理超时任务}elsetask-_func();//执行任务}catch(...){}--_atomic;//
任务执行完毕,这里只是为了通知waitForAllDoneunique_lockmutex
_tasks.empty())_condition.notify_all();}}
这里使用了可变模块参数、智能指针、bind、function、捕获列表的相关技术知识。
可变模块参数对参数进行了高度泛化它能表示0到任意个数、任意类型的参数。
args)-futuredecltype(f(args...)){return
它是c里新增的最强大的特性之一它对参数进行了高度泛化它能表示0到任意个数、任意类型的参数
std::futuredecltype(f(args...))
std::futuredecltype(f(args...))返回future调用者可以通过future获取返回值
futuredecltype(f(args...)){//获取现在时间int64_t
expireTime(timeoutMs0)?0:TNOWMStimeoutMs;//
taskmake_sharedpackaged_taskretType()(bind(forwardF(f),forwardArgs(args)...));//
fPtrmake_sharedTaskFunc(expireTime);fPtr-_func[task](){(*task)();};unique_lockmutex
况再去notify_condition.notify_one();return
task-get_future();}2.7、等待所有线程结束
CPP_ThreadPool::waitForAllDone(int
lock(_mutex);if(_tasks.empty())return
true;if(millsecond0){_condition.wait(lock,[this]{
_condition.wait_for(lock,chrono::milliseconds(millsecond),[this]{
threadpool;threadpool.init(2);threadpool.start();//启动线程池//
执行任务threadpool.exec(func1,10);threadpool.exec(func2,20,FLY.);threadpool.exec(1000,func3);threadpool.waitForAllDone();threadpool.stop();
threadpool;threadpool.init(2);threadpool.start();//启动线程池futuredecltype(func1_future(0))
ret01threadpool.exec(func1_future,10);futurestring
ret02threadpool.exec(func2_future,20,FLY.);threadpool.waitForAllDone();coutret01
ret02.get()endl;threadpool.stop();}class
threadpool;threadpool.init(2);threadpool.start();//启动线程池Test
f1threadpool.exec(bind(Test::test,t1,placeholders::_1),10);auto
f2threadpool.exec(bind(Test::test,t2,placeholders::_1),20);threadpool.waitForAllDone();coutf1
f2.get()endl;threadpool.stop();}int
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback