注:此教程以 Visual Studio 2019 Version 16.10.3 (MSVC 19.29.30038.1) 为标准,大多数内容参照cplusplus.com里的解释
此文章允许转载,但请标明出处(https://blog.csdn.net//article/details/118861539)
前方高能:本文字数接近2万
文章目录
- 线程?进程?多线程?
- C++11的std::thread
- C++11中的std::atomic和std::mutex
- C++11中的std::async
- C++11中的std::future
- C++11中的std::promise
- C++11中的std::this_thread
- 结尾
线程?进程?多线程?
什么是多线程?
百度百科中的解释:
多线程(multithreading),是指从软件或者硬件上实现多个线程并发执行的技术。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程,进而提升整体处理性能。
在一个程序中,这些独立运行的程序片段叫作“线程”(Thread),利用它编程的概念就叫作“多线程处理”。
进程与线程的区别
定义:
进程是正在运行的程序的实例,而线程是是进程中的实际运作单位。
区别:
- 一个程序有且只有一个进程,但可以拥有至少一个的线程。
- 不同进程拥有不同的地址空间,互不相关,而不同线程共同拥有相同进程的地址空间。
看了上述介绍,你应该明白进程与线程的区别了。什么,还不明白?下面这幅图应该能让你搞清楚:
(自己画的图,不好看请见谅)
C++11的std::thread
在C中已经有一个叫做pthread的东西来进行多线程编程,但是并不好用 (如果你认为句柄、回调式编程很实用,那请当我没说),所以c++11标准库中出现了一个叫作std::thread的东西。
std::thread常用成员函数
构造&析构函数
函数
类别
作用
thread() noexcept
默认构造函数
创建一个线程,
什么也不做
template <class Fn, class… Args>
explicit thread(Fn&& fn, Args&&… args)
初始化构造函数
创建一个线程,
以args
为参数
执行fn
函数
thread(const thread&) = delete
复制构造函数
(已删除)
thread(thread&& x) noexcept
移动构造函数
构造一个与x
相同的对象,会破坏x
对象
~thread()
析构函数
析构对象