C++11线程库 (一) 构造函数及其成员

有了一定的语法基础,对于用法,直接参考官方文档是最可靠和直接的,对于实践,要么自寻探索,要么假借他人。————我说的

https://en.cppreference.com/w/cpp/thread

调用休眠函数
休眠时间到期
等待某个事件
事件发生
任务完成或被强制结束
新建
就绪
等待操作系统分配时间
休眠
阻塞
结束

PS:使用noexcept表明函数或操作不会发生异常,会给编译器更大的优化空间。

一、类模板std::thread及对应成员函数简介

使用C++11线程库前需引用头文件#include <thread>

1.1 std::thread的构造和析构
thread() noexcept;//since c++11
thread(thread&& other) noexcept;//since c++11
template<class Function,class ...Args>
explicit thread(Function &&f,Args && ...args);//since c++11
thread(const thread&)=delete;//since c++11
~thread();  //(since C++11)

std::thread有不代表任何线程的默认构造函数,也有函数对象和参数的构造函数。注意,线程可以被移动,但是不能拷贝构造。如果一个线程对象在析构的时候仍然与某个线程关联,那么系统将会调用std::terminate()抛出异常,哪些情况析构不会抛出异常?

  • 默认构造
  • 移动后
  • join
  • detach

一个线程在结束其生命周期时,线程若处于无关联状态的(也就是上面四种情况)不会抛出异常,其他情况,将会抛出异常。

1.2 移动赋值运算符operator=
thread &operator=(thread&& other)noexcept; (since C++11)

从定义可以看出,赋值语句将会调用std::move,将右侧线程资源移动至左边。注意,被赋值的线程应该处于无关联状态,否则将会抛出异常。

1.3 观察器

观察器是线程的成员函数:

观察器含义
joinable检查线程是否处于joinable状态
get_id返回线程的id
native_handle返回一个底层实现线程句柄
hardware_concurrency返回一个最大并发线程数
  • joinable 用于判断线程是否处于joinnable状态
  • get_i 当前线程的id编号
  • native_handle 线程调度相关
  • hardware_concurreny 硬件支持的最大并发数 unsigned int n = std::thread::hardware_concurrency();
1.4 操作
操作含义
join等待线程执行完毕
detach允许线程从线程句柄独立执行
swap交换两个线程对象
1.5 非成员函数
void swap(thread &lhs,thread &rhs) noexcept;

等效于成员函数版的swap

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值