一、教程目标
1 普及多线程基本概念
2 让学生亲自接触,直观感受多线程的特点。
3 由浅入深的亲历多线程的问题,亲自解决多线程的问题。
4 掌握基本的并发开发方法。
5 具备解决工作中大部分并发问题的能力。
二、教程特点
1 代码量少,容易自己实际操作。
2 每篇文章同时给出 STL/Windows/Linux 三种对比实现。保证让你看懂公司代码。
3 作者天天在各种多线程产品代码里穿梭,只给最实用精简的用法。
1 平台相关的多线程函数
下面的代码需要同时在 Windows Ubuntu 上验证通过,而且工程都是基于 CMake的。
部分代码只有Windows版本,部分代码只有Linux版本。
比如创建线程,我们需要使用三个版本的线程来感受接口差异和共同之处:
1 STL std::thread
2 Windows CreateThread
3 Linux pthread_create
2 平台相关的开发环境
由于我们的代码有些只能运行在 Windows 环境,有些只能运行在Linux 环境,所以我们准备了两套开发环境。
自始至终,我们都只需要有一个Windows 10 或 Windows 11 即可。
在 Windows 环境上,我们使用 Visual Studio 2022 来开发 STL版本的代码(std::thread),以及 Windows 平台的代码(CreateThread)。
Linux 环境的代码开发调试,我们会在Windows上另外搭建开发环境来实现。主要包括下面的内容,参考 下面的“开发环境搭建”部分的内容。
三、开发环境搭建
我提供两个开发Linux 环境代码的开发环境搭建教程,大家自己任选其中的一个。
从环境搭建的简单程度来说,个人推荐第一个:使用 Windows + Visual Studio 2022 + WSL2 来开发 Linux代码。
1 基于Visual Studio 2022 + WSL2 的Ubuntu开发环境
Visual Studio 2022 在Windows上编译调试WSL2 CMake Linux工程
2 基于WSL2+Qt5 的 Ubuntu 开发环境
Windows开发调试纯Linux代码(WSL+Qt+MobaXterm)环境搭建(超详细教程)
推荐一个免费的 Windows 嵌入式 Linux QtCreator 开发环境_哔哩哔哩_bilibili
四、线程入门
1 线程并发
1.1 单独创建一个线程并执行
练习1 自动记录上班打卡时间(期待ing)
1.3 单独创建2个线程并执行(STL/Windows/Linux)
1.4 创建10个线程并执行(STL/Windows/Linux)
2 线程同步
2.1 两个线程并发(乱序)执行:乱箭穿心 std::thread
2.2 两个线程同步执行:condition_variable 解决乱箭穿心(STL/Windows/Linux)
2.3 如何优雅的退出线程(condition_variable )
2.4 死锁与防范
3 原子操作
4 并发发挥多核CPU的优势
4.1 使用多线程std::thread发挥多核计算优势(题目)
4.2 使用多线程std::thread发挥多核计算优势(解答)
五、Linux 多路I/O
linux eventfd
linux select 模型极简案例
linux poll 模型极简案例
linux epoll 模型极简案例
六、项目实战
1 播放器
项目1 Qt YUV播放器(期待ing)
项目2 ffmpeg 拉流(期待ing)
项目3 Qt+ffmpeg拉流播放器(期待ing)
2 炒股笔记
项目1 炒股笔记软件(期待ing)