关于"C++实现线程池的简单方法示例",我们可以以下步骤进行:
步骤1:了解线程池的概念
线程池是一种多线程处理形式,为了避免反复地创建和销毁线程带来的系统开销,为了使线程能够得到复用,提高代码的效率和稳定性。线程池所要做的工作就是控制线程的数量、保证任务的异步执行和线程安全。
步骤2:实现线程池
在实现线程池时,需要考虑以下几个方面:
2.1 任务队列
线程池中的任务队列是为了存储任务的队列,线程池中的线程池从任务队列中取出任务并执行。队列可以使用STL中的队列容器实现。
2.2 线程
线程池中的线程是用来执行任务的,线程池中通常会创建指定数量的线程或者线程池自身根据当前情况决定创建或者销毁线程。
2.3 线程同步
线程同步是为了保证任务在任务队列中的分配和取出时是线程安全的,线程同步可以使用STL中的mutex和condition_variable实现。
2.4 执行任务
线程池的核心是执行任务,线程池从任务队列中取出任务,并将任务分配给空闲的线程执行。任务执行完成后,线程将任务状态改为已完成,并释放线程资源。
步骤3:编写示例代码
示例1:一个简单的线程池实现。
#include "ThreadPool.h"
#include <iostream>
#include <thread>
void func1(int i)
{
std::cout << "func1 " << i << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
void func2(int i)
{
std::cout << "func2 " << i << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(1));
}
int main()
{
ThreadPool threadPool;
threadPool.start();
for (int i = 0; i < 10; ++i)
{
if (i % 2 == 0)
threadPool.addTask(func1, i);
else
threadPool.addTask(func2, i);
}
threadPool.stop();
return 0;
}
示例2:使用线程池计算并打印斐波那契数列的前20项。
#include "ThreadPool.h"
#include <iostream>
#include <vector>
#include <chrono>
void Fibonacci(long long n, long long &result)
{
if (n == 0)
result = 0;
if (n == 1)
result = 1;
long long i = 2, i_1 = 1, i_2 = 0;
while (i <= n)
{
result = i_1 + i_2;
i_2 = i_1;
i_1 = result;
++i;
}
}
int main()
{
ThreadPool threadPool;
threadPool.start();
std::vector<std::future<long long>> results;
//计算斐波那契数列的前20项
for (int i = 0; i < 20; ++i)
{
results.emplace_back(threadPool.addTask(Fibonacci, i, std::placeholders::_1));
}
//打印结果
for (auto &result : results)
std::cout << result.get() << std::endl;
threadPool.stop();
return 0;
}
以上就是"C++实现线程池的简单方法示例"的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C++实现线程池的简单方法示例 - Python技术站