c++11多线程记录1 -- std::thread
启动一个线程
话不多说,直接上代码
void func();
int main()
{
std::thread t(func); //这里就开始启动线程了
t.join(); // 必须调用join或者detach
return 0;
}
void func()
{
std::cout << "Hello, " << std::this_thread::get_id() << std::endl;
}
等待子线程结束
有时候开启一个子线程之后,父线程很快运行结束;
如果想要父线程做完自己的工作之后等待子线程运行完再结束
......
std::thread t(func);
t.join();
......
子线程分离
子线程有很多很多工作需要完成,父线程不想等待它,这时候可以用detach
......
std::thread t(func);
t.detach();
子线程分离后相当于是一个后台线程,这时负责子线程资源回收什么的,是c++运行库而不是父线程了.
注意点
要确保线程运行时所用的资源不会被提前释放
在上面这个小例子里,main线程创建了一个t线程,然后调用t.detach();
如果t线程中使用到了main线程里的某些资源(记作resources),那么就有必要引起注意.
如果main线程工作很少;t线程工作繁重,需要运行很长时间;
当main线程结束时,resources会被释放,然而这时t线程中还需要用到这些resources.
这就是问题所在:####要确保线程运行时所用的资源不会被提前释放
detach和join两者只能用一次
不能调用了detach之后再调用join;也不能调用join之后再调用detach
(测试的时候我就试了先用detach再用join,然后就死了,卡了好一会。。)
c++11多线程记录1 -- std::thread的更多相关文章
- C++11 并发指南二(std::thread 详解)
上一篇博客<C++11 并发指南一(C++11 多线程初探)>中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用 ...
- C++11 并发指南二(std::thread 详解)(转)
上一篇博客<C++11 并发指南一(C++11 多线程初探)>中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用 ...
- 【C/C++开发】C++11 并发指南二(std::thread 详解)
上一篇博客<C++11 并发指南一(C++11 多线程初探)>中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用 ...
- c++11多线程学习笔记之一 thread基础使用
没啥好讲的 c++11 thread类的基本使用 #include "stdafx.h" #include <iostream> #include <thre ...
- c++11多线程记录6:条件变量(condition variables)
https://www.youtube.com/watch?v=13dFggo4t_I视频地址 实例1 考虑这样一个场景:存在一个全局队列deque,线程A向deque中推入数据(写),线程B从deq ...
- c++11多线程记录3: 数据争用和Mutex的使用
https://www.youtube.com/watch?v=3ZxZPeXPaM4 学习视频 数据争用 简单来说就是存在多个线程同时对某个共同的对象进行读写(至少有一个线程在做写操作),造成读取这 ...
- c++11多线程记录2:线程管理
线程没有调用join和detach thread对象必须调用join或者detach,否则程序会终止 例如: void func() { std::cout << "hello, ...
- c++11多线程记录0
两种并发编程模型 多进程 进程间通信常用的几种方式: 文件 管道 消息队列 多线程 一个进程中存在的多个线程,通常通过共享内存来通信,(说的非常非常粗俗,就是通过类似"全局变量"的 ...
- c++11多线程记录5: Unique Lock和延时初始化
https://www.youtube.com/user/BoQianTheProgrammer 视频网址 Unique Lock unique_lock和lock_guard类似,都是mutex的w ...
随机推荐
- 04_配置交换机Telnet服务(数通华为)
1. 网络拓扑: 2. SW1配置:2.1 配置为Access口,vlan 10:[SW1]vlan 10[SW1-GigabitEthernet0/0/1]port link-type access ...
- 在itop4412移植linux4.14和设备树遇到的问题及解决
Linux4.14的设备树下已经对itop4412做了支持,本来应该很容易进行移植,可是在使用讯为给的资料中,对exynos4412-itop-scp-core.dtsi中原本的代码全部进行了注释,并 ...
- 【POJ1426】Find The Multiple
本题传送门 本题知识点:深度优先搜索 | 宽度优先搜索 题意很简单,让我们找一个只有1和0组成的十位数是n的倍数的数. 这题一开始吓到我了--因为Output里说输出的长度最长不超过100位???那是 ...
- OpenFOAM——冲击斜坡
本算例来自<ANSYS Fluid Dynamics Verification Manual>中的VMFL045: Oblique Shock Over an Inclined Ramp ...
- sql server 使用链接服务器远程查询
--PKselect * from sys.key_constraints where object_id = OBJECT_ID('TB')--FKselect * from sys.foreign ...
- 【转】Android Fastboot 与 Recovery 和刷机
1. 首先来看下Android系统的分区: Android系统的分区.jpg Android分区解释.png 安卓系统一般把rom芯片分成7个区,如果再加上内置sd卡这个分区,就是8个: hb ...
- java定时任务框架Quartz入门与Demo搭建
- 启用IIS Express SSL(Https)的注意事项
2年前搞国外的信用卡支付对接,必须用SSL方式调用第三方支付公司的接口,本地调试需要启用IIS Express的SSl,最近又搞类似需要SSL的项目,忘记怎么设置的了,本以为直接将原来的http后面加 ...
- Shared variable in python's multiprocessing
Shared variable in python's multiprocessing https://www.programcreek.com/python/example/58176/multip ...
- AWS研究热点:BMXNet – 基于MXNet的开源二进神经网络实现
http://www.atyun.com/9625.html 最近提出的二进神经网络(BNN)可以通过应用逐位运算替代标准算术运算来大大减少存储器大小和存取率.通过显着提高运行时的效率并降低能耗,让最 ...