启动一个线程

话不多说,直接上代码

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的更多相关文章

  1. C++11 并发指南二(std::thread 详解)

    上一篇博客<C++11 并发指南一(C++11 多线程初探)>中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用 ...

  2. C++11 并发指南二(std::thread 详解)(转)

    上一篇博客<C++11 并发指南一(C++11 多线程初探)>中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用 ...

  3. 【C/C++开发】C++11 并发指南二(std::thread 详解)

    上一篇博客<C++11 并发指南一(C++11 多线程初探)>中只是提到了 std::thread 的基本用法,并给出了一个最简单的例子,本文将稍微详细地介绍 std::thread 的用 ...

  4. c++11多线程学习笔记之一 thread基础使用

    没啥好讲的  c++11  thread类的基本使用 #include "stdafx.h" #include <iostream> #include <thre ...

  5. c++11多线程记录6:条件变量(condition variables)

    https://www.youtube.com/watch?v=13dFggo4t_I视频地址 实例1 考虑这样一个场景:存在一个全局队列deque,线程A向deque中推入数据(写),线程B从deq ...

  6. c++11多线程记录3: 数据争用和Mutex的使用

    https://www.youtube.com/watch?v=3ZxZPeXPaM4 学习视频 数据争用 简单来说就是存在多个线程同时对某个共同的对象进行读写(至少有一个线程在做写操作),造成读取这 ...

  7. c++11多线程记录2:线程管理

    线程没有调用join和detach thread对象必须调用join或者detach,否则程序会终止 例如: void func() { std::cout << "hello, ...

  8. c++11多线程记录0

    两种并发编程模型 多进程 进程间通信常用的几种方式: 文件 管道 消息队列 多线程 一个进程中存在的多个线程,通常通过共享内存来通信,(说的非常非常粗俗,就是通过类似"全局变量"的 ...

  9. c++11多线程记录5: Unique Lock和延时初始化

    https://www.youtube.com/user/BoQianTheProgrammer 视频网址 Unique Lock unique_lock和lock_guard类似,都是mutex的w ...

随机推荐

  1. luogu_2831: 愤怒的小鸟

    洛谷2831:愤怒的小鸟(状压\(dp\)) 题意: 在二维平面上给定\(n\)个点\((1\leq n\leq18)\). 其中每个点用\((x_i,y_i)\)表示\((0<x_i,y_i& ...

  2. The real universe

  3. 【JZOJ6233】【20190627】心的旋律

    题目 你需要构造一个\(n\)个点的二分图 定义\(F(A)\)表示左部点集\(A\)能够到达的右部中的点 使得满足 $ F(A) \lt |A| $ 的集合恰好有 $ k $ 个 \(1 \le n ...

  4. share memory between guest and nic

    通过硬件的IOMMU,内核提供的共享内存.VFIO可以实现. REF: 1. offical DPDK API Doc, 简书有翻译版 DPDK编程指南(翻译)(一)  (二十七) 2. dpdk v ...

  5. SpringBoot2.0给所有Controller添加统一前缀

    需求 给所有Controller添加统一前缀 实现 在配置文件中添加:server.servlet.context-path: /api(不同SpringBoot版本会有区别,这里是采用2.0) 结果 ...

  6. shell expect的简单实用

    一.在shell脚本中嵌入expect来实现密码输入 expect是一个自动交互功能的工具.expect是开了一个子进程,通过spawn来执行shell脚本,监测到脚本的返回结果,通过expect判断 ...

  7. linux修改/etc/profile权限

    修改/etc/profile时提示为只读文件,不允许修改, 敲#chmod 777 /etc/profile后仍不允许修改 解决办法: 在root权限下敲 #:mount -o remount,rw ...

  8. H5中对history栈的操作

    今天研究一下H5中history操作的相关知识,首先梳理一下基本内容: 一.在history中的跳转 使用 back(), forward()和 go() 方法来完成在用户历史记录中向后和向前的跳转. ...

  9. 阿里P8架构师深度概述分布式架构

    简介 作为一名架构师,我们要专业,要能看懂代码,及时光着臂膀去机房,也能独挡一面!及时同事搞不定问题,或者撂挑子,你也能给老大一个坚定的眼神:不怕,有我在!还能在会议室上滔滔不绝,如若无人,让不懂技术 ...

  10. Siam R-CNN: Visual Tracking by Re-Detection

    Siam R-CNN: Visual Tracking by Re-Detection 2019-12-02 22:21:48 Paper:https://128.84.21.199/abs/1911 ...