XuQi's Blog

  • 首页

  • 归档

线程池

发表于 2019-06-17 更新于 2019-10-20

c++11 线程池实现以及示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
#include "ThreadPool.h"
ThreadPool::ThreadPool(size_t threads)
: stop(false)
{
//创建n个线程,每个线程等待是否有新的task, 或者线程stop(要终止)
for (size_t i = 0; i < threads; ++i) {

// 构造并插入vector最后
workers.emplace_back(
[this]
{
for (;;)//轮询
{
std::function<void()> task;
{
//获取同步锁
std::unique_lock<std::mutex> lock(this->queue_mutex);
//线程会一直阻塞,直到有新的task,或者是线程要退出
this->condition.wait(lock,
[this]
{ return this->stop || !this->tasks.empty(); });
//线程退出
if (this->stop && this->tasks.empty())
return;
//将task取出
task = std::move(this->tasks.front());
//队列中移除以及取出的task
this->tasks.pop();
}
//执行task,完了则进入下一次循环
task();
}
}
);
}
}
# “线程池”
机器学习之支持向量机(SVM)
c++11并发指南
  • 文章目录
  • 站点概览

XuQi

44 日志
30 标签
  1. 1. c++11 线程池实现以及示例
© 2019 XuQi
由 Hexo 强力驱动 v3.9.0
|
主题 – NexT.Muse v7.3.0