-
1 简介: 线程池是一种常用的并发设计模式,用于管理和调度多个线程进行任务处理。线程池通过预先创建一组线程,并维护一个任务队列,从任务队列中获取任务并分配给空闲的线程执行,以提高系统的性能和资源利用率。
-
2 实现步骤: 以下是使用C++实现线程池模式的步骤:
a. 定义任务类:首先,定义一个任务类,该类包含待执行的任务逻辑和数据。
class Task { public: void execute() { // 任务的执行逻辑 } };
b. 实现线程池类:创建一个线程池类,该类包含线程池的管理和调度逻辑。
class ThreadPool { private: std::vector<std::thread> threads; std::queue<Task> tasks; std::mutex mutex; std::condition_variable condition; bool stop; public: ThreadPool(size_t numThreads) : stop(false) { for (size_t i = 0; i < numThreads; ++i) { threads.emplace_back([this] { while (true) { std::unique_lock<std::mutex> lock(mutex); condition.wait(lock, [this] { return stop || !tasks.empty(); }); if (stop && tasks.empty()) { return; } Task task = std::move(tasks.front()); tasks.pop(); lock.unlock(); task.execute(); } }); } } ~ThreadPool() { { std::unique_lock<std::mutex> lock(mutex); stop = true; } condition.notify_all(); for (std::thread& thread : threads) { thread.join(); } } void enqueueTask(const Task& task) { { std::unique_lock<std::mutex> lock(mutex); tasks.push(task); } condition.notify_one(); } };
3 示例代码: 以下是一个使用线程池模式的示例代码:
#include <iostream> int main() { // 创建线程池对象 ThreadPool threadPool(4); // 添加任务到线程池 for (int i = 0; i < 10; ++i) { threadPool.enqueueTask(Task()); } // 等待任务执行完成 std::this_thread::sleep_for(std::chrono::seconds(5)); return 0; }
-
上述代码中,客户端可以创建线程池对象并将任务添加到线程池中,线程池会自动调度线程执行任务。
-
4 优点:
- 降低系统的开销:通过重用线程和任务队列的方式,减少了线程的创建和销毁的开销。
- 提高系统的性能:线程池中的线程可以并行执行多个任务,从而提高了系统的响应速度和吞吐量。
-
5 注意事项:
- 在使用线程池时,需要注意任务的线程安全性和资源竞争问题。
- 确定线程池中线程的数量,根据系统的负载和需求进行调整。
C++线程池模式
猜你喜欢
转载自blog.csdn.net/qq_36541069/article/details/132321694
今日推荐
周排行