系列文章目录
《ZLToolKit源码学习笔记》(1)VS2019源码编译
《ZLToolKit源码学习笔记》(2)工具模块之日志功能分析
《ZLToolKit源码学习笔记》(3)工具模块之终端命令解析
《ZLToolKit源码学习笔记》(4)工具模块之消息广播器
《ZLToolKit源码学习笔记》(6)线程模块之整体框架概述(本文)
《ZLToolKit源码学习笔记》(7)线程模块之线程池组件:任务队列与线程组
《ZLToolKit源码学习笔记》(8)线程模块之线程负载计算器
《ZLToolKit源码学习笔记》(9)线程模块之任务执行器
《ZLToolKit源码学习笔记》(11)线程模块之工作线程池WorkThreadPool
《ZLToolKit源码学习笔记》(12)事件轮询模块之整体框架概述
《ZLToolKit源码学习笔记》(13)事件轮询模块之管道的简单封装
《ZLToolKit源码学习笔记》(14)事件轮询模块之定时器
《ZLToolKit源码学习笔记》(15)事件轮询模块之事件轮询器EventPoller
《ZLToolKit源码学习笔记》(16)网络模块之整体框架概述
《ZLToolKit源码学习笔记》(17)网络模块之基础接口封装类SockUtil
《ZLToolKit源码学习笔记》(18)网络模块之Buffer缓存
《ZLToolKit源码学习笔记》(19)网络模块之套接字封装
《ZLToolKit源码学习笔记》(20)网络模块之TcpServer
《ZLToolKit源码学习笔记》(21)网络模块之TcpClient与Session
《ZLToolKit源码学习笔记》(22)网络模块之UdpServer
前言
线程模块包括了任务队列、信号量、线程组、线程池等功能封装。
目录
一、概述
线程模块主要包含以下文件:
semaphore.h | 信号量。semaphore类,封装了条件变量,提供了post和wait方法。 |
TaskExecutor.cpp,TaskExecutor.h | 包括线程负载计数器(ThreadLoadCounter)、任务执行器(TaskExecutor)、任务执行器获取器(TaskExecutorGetterImp)、可取消任务封装类(TaskCancelableImp) |
TaskQueue.h | 任务队列。队列中存储的是函数对象,任务的类型是function<void()>,所以可以存储所有的可调用对象,包括函数、lambda表达式、重载了()运算符的类实例化对象。 |
threadgroup.h | 线程组。管理一组线程。提供了创建线程(create_thread)、删除指定线程(remove_thread)、等待线程组中的线程退出(join_all)、判断指定线程是否在线程组中(is_thread_in)、判断当前线程是否在线程组中(is_this_thread_in)、获取当前线程组中线程数量(size) |
ThreadPool.h | 线程池。组件管理者,将任务队列以及线程组关联起来使用。继承了TaskExecutor,支持同步和 异步执行任务。 |
WorkThreadPool.cpp,WorkThreadPool.h | 工作线程池,也是管理一组线程,但和ThreadPool不同,ThreadPool所有线程共享任务队列,存在竞争关系,而WorkThreadPool中的每个线程都有自己的队列(实际上是EventPoller管道事件驱动,一个 EventPoller对应一个线程)、各线程不存在竞争关系。 |
二、类图
各文件中的类关系如下图: