首先我们得明白ThreadPool类是干嘛的,就是生成一个线程池。是基于Thread类实现的。
首先我们看ThreadPool的数据成员。代码:
mutable MutexLock mutex_;
Condition notEmpty_ GUARDED_BY(mutex_);
Condition notFull_ GUARDED_BY(mutex_);
string name_;
Task threadInitCallback_;
std::vector<std::unique_ptr<muduo::Thread>> threads_;
std::deque<Task> queue_ GUARDED_BY(mutex_);
size_t maxQueueSize_;
bool running_;
std::vector<std::unique_ptr<muduo::Thread>> threads_; 这个就是线程池的实现,使用vector来存储每个线程的智能指针
string name_; 是线程池的名字,在muduo中默认为ThreadPool
std::deque<Task> queue_ GUARDED_BY(mutex_); 使用双端队列实现的任务队列
mutable MutexLock mutex_;
Condition notEmpty_ GUARDED_BY(mutex_);
Condition notFull_ GUARDED_BY(mutex_); 这个互斥量和条件变量保任务队列的线程安全
size_t maxQueueSize_; 任务队列最多能容纳多少任务
bool running_; 线程池是否运行
知道了数据成员,当然就要看类的构造函数,代码
explicit ThreadPool(const string& nameArg = string("ThreadPoo

本文详细解析了muduo库中的ThreadPool类,包括数据成员、构造函数、线程池启动、任务执行与停止过程。重点关注了线程池如何创建线程并执行任务,以及线程池的停止函数,同时提到了测试函数ThreadTest.cc中的测试用例。通过分析,展示了线程池中生产者消费者模型的应用。

8454

被折叠的 条评论
为什么被折叠?



