文章目录
1. 多线程
1.1 多进程与多线程
1.2 多线程理解
1.3 创建线程
1.4 join 与 detach 方式
(1)join 举例
(2)detach 举例
1.5 this_thread
2. mutex
2.1 lock 与 unlock
2.2 lock_guard
2.3 unique_lock
3. condition_variable
3.1 wait
3.2 wait_for
4. 线程池
4.1 概念
4.2 线程池的实现
1. 多线程
传统的 C++(C++11 之前)中并没有引入线程这个概念,在 C++11 出来之前,如果我们想要
在 C++中实现多线程,需要借助操作系统平台提供的 API,比如 Linux 的<pthread.h>,或者
windows 下的<windows.h> 。
C++11 提供了语言层面上的多线程,包含在头文件<thread>中。它解决了跨平台的问题,提
供了管理线程、保护共享数据、线程间同步操作、原子操作等类。C++11 新标准中引入了 5
个头文件来支持多线程编程,如下图所示:
1.1 多进程与多线程
多进程并发
使用多进程并发是将一个应用程序划分为多个独立的进程(每个进程只有一个线程),这些
独立的进程间可以互相通信,共同完成任务。由于操作系统对进程提供了大量的保护机制,
以避免一个进程修改了另一个进程的数据,使用多进程比多线程更容易写出安全的代码。但
是这也造就了多进程并发的两个缺点:
在进程间的通信,无论是使用信号、套接字,还是文件、管道等方式,其使用要么比较复杂,
要么就是速度较慢或者两者兼而有之。
运行多个线程的开销很大,操作系统要分配很多的资源来对这些进程进行管理。
由于多个进程并发完成同一个任务时,不可避免的是:操作同一个数据和进程间的相互通信,
上述的两个缺点也就决定了多进程的并发不是一个好的选择。