【C++】C++11下线程库
C++11下线程库
- 1. thread类的简单介绍
- 2.线程函数参数
- 3.原子性操作库(atomic)
- 4.mutex的种类
- 5. RAII风格加锁解锁
- 5.1Lock_guard
- 5.2unique_lock
- 6.condition_variable
1. thread类的简单介绍
在C++11之前,涉及到多线程问题,都是和平台相关的,比如windows和linux下各有自己的接口,这使得代码的可移植性比较差。C++11中最重要的特性就是对线程进行支持了,使得C++在并行编程时不需要依赖第三方库,而且在原子操作中还引入了原子类的概念。要使用标准库中的线程,必须包含头文件。
(图片来源网络,侵删)C++11中线程类
还有一些和线程有关的锁、条件变量、原子操作等。
C++11线程库本质是对不同平台的线程库进行封装。
先看看线程相关主要的接口
(图片来源网络,侵删)函数名 功能 thread() 构造一个线程对象,没有关联任何线程函数,即没有启动任何线程 thread(fn,args1, args2,…) 构造一个线程对象,并关联线程函数fn,args1,args2,…为线程函数的参数 get_id() 获取线程id jionable() 线程是否还在执行,joinable代表的是一个正在执行中的线程。 jion() 该函数调用后会阻塞住线程,当该线程结束后,主线程继续执行 detach() 在创建线程对象后马上调用,用于把被创建线程与线程对象分离开,分离的线程变为后台线程,创建的线程的"死活"就与主线程无关 线程不允许拷贝构造,但支持移动构造。
也不允许赋值重载。但支持移动赋值。
注意:
1.线程是操作系统中的一个概念,线程对象可以关联一个线程,用来控制线程以及获取线程的状态。
(图片来源网络,侵删)2.当创建一个线程对象后,没有提供线程函数,该对象实际没有对应任何线程。
int main() { thread t1; return 0; }
3.当创建一个线程对象后,并且给线程关联线程函数,该线程就被启动,与主线程一起运行。
线程函数一般情况下可按照以下三种方式提供:
- 函数指针
- lambda表达式
- 函数对象
void ThreadFunc(int a) { cout public: void operator()() { cout // 线程函数为函数指针 thread t1(ThreadFunc, 10); // 线程函数为lambda表达式 thread t2([] {cout int n,m; cinnm; vector //移动赋值 t = thread([m] { for (size_t i = 0; i
文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。
还没有评论,来说两句吧...