自定义线程池
注意: 需要
c++17
或c++20
的支持
代码实现:
#ifndef THREADPOOL_H
#define THREADPOOL_H
#include <vector>
#include <queue>
#include <thread>
#include <mutex>
#include <condition_variable>
#include <functional>
#include <future>
#include <atomic>
#include <iostream>
//线程池,单例类
class ThreadPool
{
public:
static ThreadPool& getInstance()
{
//std::thread::hardware_concurrency() //获取线程数 最小10个线程
static int size = std::max((int)std::thread::hardware_concurrency(),10);
static ThreadPool instance(size,size * 2);
return instance;
}
ThreadPool(ThreadPool const&) = delete;
void operator=(ThreadPool const&) = delete;
//增加运行的函数 动态获取类型
template<typename F, typename... Args>
auto enqueue(F&& f, Args&&... args) -> std::future<typename std::invoke_result<F,Args...>::type>
{
//返回类型
using return_type = typename std::invoke_result<F,Args...>::type;
//打包函数
auto task = std::make_shared<std::packaged_task<return_type()> >(
std::bind(std::forward<F>(f), std::forward<Args>(args)...)
);
std::future<return_type> res = task->get_future();
{
std::lock_guard <std::mutex> lock(m_queue_mutex);
if (m_stop)
{
//return res;