[C++]固定大小线程池

本文介绍了C++中固定大小线程池的概念,强调了线程池在提高并发效率上的作用。线程池包含一个任务队列和一组线程,利用生产者消费者模型,通过mutex和condition variable进行同步。线程池类的数据成员包括线程数组和任务队列,Start操作用于初始化线程池,Run函数用于添加任务,Stop函数则负责停止线程池并join所有工作线程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

线程池模型

线程池是并发编程中常用的模型。
线程是一种非常宝贵的资源,创建、销毁线程都是非常消耗时间的操作,所以我们的一个思路是在程序start up的时候,创建一个保存有多个线程的缓存,这样程序运行时就不会频繁的发生创建和销毁线程的操作,从而提高了并发的效率。
保存有多个线程的这个缓存,我们一般称其为线程池(ThreadPool)。如果线程池的中线程的数量可以动态变化,我们称其为动态大小的线程池,这里讨论并实现的是固定大小的线程池

线程池中维护多个线程(thread)的同时,维护一个任务队列。所谓的任务队列,就是需要我们去并发执行的一个个的任务,说的通俗一点,就是等待执行的一个个函数。一旦任务队列不空,取出一个任务给定某个空闲的线程去执行该任务。
这是一个典型的生产者和消费者的模型,所以我们要用到mutex和conditon variable原语。除此之外,我们还应该对“任务”有一个合理的抽象。
所以线程池这个类的数据成员应该有如下几个:

1.mutex_t            mutex
2.condition_t        cond
3.vector_t<thread_t> threadVec
4.queue_t<task_t>    taskQ

其中thread_t在C++11中可以使用std::thread来替代,可是这里的task_t我们还没有定义。
实际上,task_t是对某个执行过程的抽象,所以我们可以用C++11中的function语义来替代:

using task_t = function<void()>
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值