一、整体架构概述
线程池是一种并发编程的设计模式,核心目的是管理一组预先创建的线程,避免在程序运行过程中频繁创建和销毁线程带来的性能开销。通过线程池,可以将任务存储在任务队列中,让线程池内的线程从队列中取出任务并执行,实现线程的复用,提高程序的执行效率和资源利用率。
笔记基于Github上一个开源项目完成。
二、架构详细组成部分
(一)线程池类(ThreadPool)
1. 成员变量
成员变量名
类型
作用
workers
std::vector<>
存储线程池中的所有工作线程。线程创建后添加到该向量,便于后续管理,如析构时通过
join 操作等待线程结束。
tasks
std::queue<std::function<void()>
作为任务队列存储待执行任务。新任务添加到队列尾部,工作线程从头部取任务执行,遵循先进先出(FIFO)原则。
queue_mutex
std::mutex
互斥锁,保障任务队列的线程安全。因任务队列可能被多线程同时访问(如添加和 ...
Recursion
关于recursion,CS106B给出了一个很好的模板。
self-similar 问题用递归解决是一个良好方向。 123456789101112if (The problem is very simple) {Directly solve the problem.Return the solution.} else {Split the problem into one or moresmaller problems with the samestructure as the original.Solve each of those smaller problems.Combine the results to get the overallSolution.Return the overall solution.}
backtracking在课程和作业中也有体现 1234567891011if (problem is sufficiently simple) { return whether the ...
回顾
七八月:在家摆了两个月,考驾照,考到科二,加了一个游戏文案小组群。
九月:到学校,高考砸了,被调剂。适应学校同时,开始对未来打算,也多亏了之前上网冲浪的经历,接触了些网络学习渠道,开始CS50。做的相当痛苦,写不出了problem。
十月:反正就是磨,把cs50磨完了,感觉自己还是太笨了,磕磕绊绊,什么都不会写。其间,还到牛客上做题·写了些简单题(我,当时,太蠢了),力扣上写了些简单题,感觉什么都没学会。尝试了许多方向,在写了几期游戏文案活动后,很挫败。(理想与现实的偏差,写不来东西,很痛苦,感觉自己不适合写这东西,很难是现在还有什么创作热情)
十一月:又跑去学了些其他东西,摸了些数字模拟电路的皮毛。开始看51和stm32单片机教程,51速通,stm32学到pwm,又去学了EDA,画电路板,摸了些皮毛,会简单画画电路板,上嘉立创白嫖了几份。开始cs106x
十二月:折磨,cs106x推进相当艰难,还是不会写,痛苦,我一直怀疑自己是否适合学着东西。折腾来折腾去,没一个主线,反正就是在试。力扣,代码随想录上又开始做了些题,还是太笨了,做不出来。期末要到了,准备些考试。
...



