0%

c++设计线程池(3)需求分析

我们实现的是一个线程池,他是一个应用的一部分组件,可以算作一个库。并不能算作中间件。因为,他不能够独立完成一个功能或服务。

最终打包成一个动态库供别人使用。

使用方式

1
2
3
4
5
6
7
8
9
10
// 建立线程池对象
ThreadPool pool;
// 选择模式,固定大小或者可变大小
pool.setMode(fixed(default) | cached);
// 启动线程池
pool.start();
// 提交任务到线程池,返回任务计算完成的的值(可选的返回值,也可能没有)
Result result = pool.submitTask(concreteTask);
// 获得最终的结果类型
result.get().Cast<>();

image-20240603125437820

还需要一个线程容器存放Thread对象。(也是有大小的)

还需要一个任务容器存放任务对象。(也是有大小的)

任务容器存放的是任务抽象基类(里面有一个纯虚函数run方法),以便可以存放任何任务。用户需要继承task基类来实现自己的任务。

条件变量加互斥锁确保task容器线程安全。