std::thread 详解
thread 构造方式
- 默认构造
std::thread T1;
- 初始化构造函数
std::thread T2(func,args...)
- 深拷贝构造函数
std::thread T3(T2)
注意 被标注 delete 应舍弃 - Move 构造函数
std::thread T4(std::move(T2))
注意 std::move 之后 并不存在实例化之后的 T2 了,类似于std::string a="Example;"
std:string b(std::move(a));
此时 a 等同于string a
。
赋值操作
- std::move 赋值操作
std::thread T5 = std::thread(func,args)
- 深拷贝赋值操作
std::thread T6 = T5
注意 被标注 delete 应舍弃
函数名 | 功能 | 返回值 |
---|---|---|
get_id() | 获取线程 ID | std::thread::id |
join() | 阻塞当前线程直到调用的线程执行完毕 | void |
joinable() | 检查线程是否可被 join | bool |
detach() | 使该线程与当前线程分离单独运行 | void |
swap() | 交换线程对象所代表的底层句柄 | void |
native_handle() | 返回线程句柄 | native_handle_type |
hardware_concurrency | 当前平台所支持的并发数目 | static unsigned int |
this_thread
函数名 | 功能 | 返回值 |
---|---|---|
yield() | 当前进程放弃执行 | void |
sleep_until | 线程休眠直到指定的时间点 | void |
sleep_for | 线程休眠指定的时间 | void |
标注
join() 和 detach() 的区别
join() 会阻塞当前进程等待指定进程结束。在此期间 joinable()==1;
detach() 一旦脱离 除非使用其他方式(信号量 etc) 否则无法获知运行状态,在此期间 joinable()==0;thread 构建之后会立即运行。
此后的 join() detach 只能在线程运行期间有效。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论