如何通过简单示例实现线程池功能?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1227个文字,预计阅读时间需要5分钟。
最近自己写了一个线程池。简单来说,线程池就是一个任务队列和一个线程队列。任务队列中存放着待执行的任务,线程队列中存放着可以执行任务的线程。线程队列不断地从任务队列中取出任务来执行,当任务队列为空时,线程会阻塞等待新的任务加入。
最近自己写了一个线程池。
总的来说,线程池就是有一个任务队列,一个线程队列,线程队列不断地去取任务队列中的任务来执行,当任务队列中为空时,线程阻塞等待新的任务添加过来。
我是用queue来存放任务,vector存放thread*,然后用condition_variable 来设置线程阻塞和唤醒。
下面直接上代码吧。
线程池类头文件Thread_Pool.h
/******************************************** 线程池头文件 Author:十面埋伏但莫慌 Time:2020/05/03 *********************************************/ #pragma once #ifndef _THREAD_POOL_H_ #define _THREAD_POOL_H_ #include<thread> #include<queue> #include<mutex> #include<atomic> #include<vector> #include<condition_variable> typedef std::function<void()> Func;//定义线程执行函数类型,方便后面编码使用。
本文共计1227个文字,预计阅读时间需要5分钟。
最近自己写了一个线程池。简单来说,线程池就是一个任务队列和一个线程队列。任务队列中存放着待执行的任务,线程队列中存放着可以执行任务的线程。线程队列不断地从任务队列中取出任务来执行,当任务队列为空时,线程会阻塞等待新的任务加入。
最近自己写了一个线程池。
总的来说,线程池就是有一个任务队列,一个线程队列,线程队列不断地去取任务队列中的任务来执行,当任务队列中为空时,线程阻塞等待新的任务添加过来。
我是用queue来存放任务,vector存放thread*,然后用condition_variable 来设置线程阻塞和唤醒。
下面直接上代码吧。
线程池类头文件Thread_Pool.h
/******************************************** 线程池头文件 Author:十面埋伏但莫慌 Time:2020/05/03 *********************************************/ #pragma once #ifndef _THREAD_POOL_H_ #define _THREAD_POOL_H_ #include<thread> #include<queue> #include<mutex> #include<atomic> #include<vector> #include<condition_variable> typedef std::function<void()> Func;//定义线程执行函数类型,方便后面编码使用。

