21xrx.com
2024-11-05 18:31:00 Tuesday
登录
文章检索 我的文章 写文章
C++线程池代码示例
2023-06-28 11:04:12 深夜i     --     --
C++ 线程池 代码示例

C++线程池是一种多线程编程技术,通常用于处理大量的并发请求。它能够有效地提高程序的运行效率和处理能力。这篇文章将介绍一个简单的C++线程池代码示例,为您提供一个基本的了解。

线程池的简介

线程池是一个管理一组线程的技术,它通过预先创建一组线程,然后将任务分配给这些线程来处理,从而减少了线程的创建和销毁时的开销,提高程序的效率和处理能力。线程池通常包括线程队列、任务队列和线程池管理器。线程队列用于存储线程,任务队列用于存储任务,线程池管理器用于管理线程池。

线程池的实现

下面是一个简单的C++线程池代码示例。它由线程池类ThreadPool和任务类Task组成。

//线程池类

class ThreadPool {

public:

  ThreadPool(int threadCount = 4) : busyCount(0), exitFlag(false) {

    for (int i = 0; i < threadCount; i++) {

      threads.push_back(std::thread(std::bind(&ThreadPool::run, this)));

    }

  }

  ~ThreadPool() {

    exitFlag = true;

    taskCV.notify_all();

    for (auto &thread : threads) {

      thread.join();

    }

  }

  void addTask(Task *task) {

    std::unique_lock lock(taskMutex);

    tasks.push(task);

    taskCV.notify_one();

  }

  void run() {

    while (!exitFlag) {

      std::unique_lock lock(taskMutex);

      while (tasks.empty() && !exitFlag) {

        taskCV.wait(lock);

      }

      if (!tasks.empty()) {

        Task *task = tasks.front();

        tasks.pop();

        lock.unlock();

        busyCount++;

        task->run();

        busyCount--;

        delete task;

      }

    }

  }

  int getBusyCount() const

    return busyCount;

private:

  std::vector threads;

  std::queue tasks;

  std::mutex taskMutex;

  std::condition_variable taskCV;

  int busyCount;

  bool exitFlag;

};

//任务类

class Task {

public:

  Task(std::function func) : func(func) {}

  void run() {

    func();

  }

private:

  std::function func;

};

使用线程池时,首先要创建一个ThreadPool对象,指定线程数量。调用addTask方法向线程池中添加任务,每个任务都是一个Task对象,其中包含一个要执行的函数。线程池内部会自动调度任务,将其分配给某个线程执行。

总结

C++线程池是一种非常实用的多线程编程技术,能够有效地提高程序的运行效率和处理能力。本文介绍了线程池的基本概念和实现方法,希望对您掌握C++多线程编程有所帮助。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复