美文网首页C++Linux
C++ 实现线程池

C++ 实现线程池

作者: 爱秋刀鱼的猫 | 来源:发表于2018-04-26 15:27 被阅读161次

c++实现一个线程池,首先需要有两个数据结构,一个是线程池,一个是任务队列。为了每个线程线程安全的从任务队列里面拿任务,还需要带一个线程同步的锁。

线程池的基本框架: 线程池的基本框架 main函数: main函数

线程池的核心代码:

    //第一步,启动线程池里面的函数,每个线程去执行threadWork 函数
    void start() {
        if (!isRuning) {
            this->isRuning = true;
            for (int i = 0; i < threadNum; i++) {
                thread * th = new thread(&ThreadPool::threadWork,this);
                threads.push_back(th);
            }
            cout << "ThreadPool is running " << endl;
            return;
        }
    }

    // threadWork 函数在在任务队列 为空的情况下是一个阻塞的状态,
    // 如果线程池的任务队列不为空,那么执行一个任务
    void threadWork() {
        cout << "threadWork" << endl;
        function<void(void)>  task = NULL;
        while (isRuning) {
            {
                std::lock_guard<std::mutex> guard(this->m_);    //类 lock_guard 是互斥封装器 , 锁离开作用域时自动释放

                if (Task_list.empty()) {
                    condition_empty_.wait(this->m_);  //等待有任务到来被唤醒
                }
                if (!Task_list.empty())
                {
                    task = Task_list.front();  //从任务队列中获取最开始任务   // typedef std::function<void(void)> Task;
                    Task_list.pop_front();     //将取走的任务弹出任务队列
                }
                else {
                    continue;
                }
                task();  //执行任务函数
            } //释放锁
        }
    }
源码:

https://github.com/GreenGitHuber/code_something

相关文章

  • 初识c++多线程

    主要参考以下两篇博客c++多线程 thread类c++实现线程池当一个thread被创建以后要么join等待线程执...

  • C++ 实现线程池

    c++实现一个线程池,首先需要有两个数据结构,一个是线程池,一个是任务队列。为了每个线程线程安全的从任务队列里面拿...

  • 线程以及java线程池实现分享

    线程以及java线程池实现分享 线程简介 JDK线程池的工作原理 JDK线程池的实现细节 1.线程简介-由来 1....

  • java多线程面试题

    实现多线程的方法 1.实现Thread接口 2.实现Runnable接口创建线程 3.实现 线程池 创建线程池的代...

  • C++ 线程池实现(上)

    1. 引言 最近工作开始使用C++,于是想用C++实现一个线程池。这里就分两篇文章来记录一下实现的过程,本篇主要为...

  • C++ 线程池实现原理

    背景 多线程编程是C++开发者的一个基本功, 但是很多开发者都是直接使用公司给包装好的线程池库, 没有去了解具体实...

  • C++线程池的实现

    本人在开发过程中经常会遇到需要使用线程池的需求,但查了一圈发现在C++中完备的线程池第三方库还是比较少的,于是打算...

  • 不怕难之线程池原理

    一、线程池状态 ThreadPoolExecutor 是 JDK 中的线程池实现,这个类实现了一个线程池需要的各个...

  • 线程池的原理

    参考 深入Java源码理解线程池原理 线程池是对CPU利用的优化手段 线程池使用池化技术实现,替他的实现还有连接池...

  • Java核心(二)深入理解线程池ThreadPool

    本文你将获得以下信息: 线程池源码解读 线程池执行流程分析 带返回值的线程池实现 延迟线程池实现 为了方便读者理解...

网友评论

    本文标题:C++ 实现线程池

    本文链接:https://www.haomeiwen.com/subject/gejulftx.html