File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -86,7 +86,7 @@ graph TD
8686
8787使用方法:
8888
89- 1 . 创建线程池对象,自行指定或者让 Asio 自动决定线程数量。
89+ 1 . 创建线程池对象,指定或让 Asio 自动决定线程数量。
9090
91912 . 提交任务:通过 [ ` boost::asio::post ` ] ( https://beta.boost.org/doc/libs/1_82_0/doc/html/boost_asio/reference/post.html ) 函数模板提交任务到线程池中。
9292
@@ -111,6 +111,9 @@ int main() {
111111}
112112```
113113
114+ > [运行](https://godbolt.org/z/h5G5hTT4a)测试。
115+
116+
114117- 创建线程池时,指定线程数量,线程池会创建对应数量的线程。
115118
116119- 使用 `boost::asio::post` 提交任务,任务会被添加到任务队列中。
@@ -134,27 +137,27 @@ thread_pool::thread_pool()
134137 num_threads_(detail::default_thread_pool_size())
135138```
136139
137- 代码很简单,就是 ` thread::hardware_concurrency() * 2 ` 而已,至于下面的判断是因为 ` std::thread::hardware_concurrency() ` 在某些特殊情况下可能返回 ` 0 ` , 例如硬件并发能力无法被检测时,那将 ` num_threads ` 设置为 2,确保线程池至少有 2 个线程。
140+ 代码很简单,就是 ` thread::hardware_concurrency() * 2 ` 而已,至于下面的判断是因为 ` std::thread::hardware_concurrency() ` 在某些特殊情况下可能返回 ` 0 ` ( 例如硬件并发能力无法被检测时),那那将 ` num_threads ` 设置为 2,确保线程池至少有 2 个线程。
138141
139142---
140143
141- 我们的重点来到它的析构函数中 :
144+ Boost.Asio 的线程池对象在析构时会自动调用相关的清理方法,但你也可以手动进行控制 :
142145
143146``` cpp
144147thread_pool::~thread_pool ()
145148{
146- stop ();
147- join ();
148- shutdown ();
149+ stop (); // 停止接收新任务
150+ join (); // 等待所有线程完成
151+ shutdown (); // 最终清理,释放资源
149152}
150153```
151154
152155- ` stop ` :修改内部的标志位存在使得线程池能够识别何时需要停止接收新的任务,然后唤醒所有线程。
153-
154156- ` join() ` :等待所有线程完成它们的工作,确保所有线程都已终止。
155-
156157- ` shutdown() ` :进行最终的清理,释放资源,确保线程池的完全清理和资源的正确释放
157158
159+ > 此处可阅读部分源码,帮助理解与记忆
160+
158161## 实现线程池
159162
160163实现一个普通的能够满足日常开发需求的线程池实际上非常简单,也只需要一百多行代码。
You can’t perform that action at this time.
0 commit comments