其实就是想记录一下自己的想法,就是关于多个线程的执行顺序的思考。之前一直觉得std::thread::join会阻塞其他线程的运行,其实并不是这样子的。举个例子

std::vector<std::thread *>lt;

 for(int i = 35 ; i >20 ; i--)
{
  std::thread *t= new thread(show,std::to_string(i)+"ccccc");
  lt.emplace_back(t);
} for(auto &it:lt)
{
it->join();
}

  想想看,上面这个例子,它运行起来之后是啥状态,不管show函数做了啥,可以看到有15个线程会被创建,然后放到lt这个容器里面,然后逐个被join,然后主线程
在这个位置被阻塞。但是思考一下,逐个进行join的话,第一个join执行的时候,如果第一个线程没有执行完,那么,就直接阻塞在这里来。换句话说,即使后面的线程
还没有被执行join函数,但是也相当于是对主线程进行了阻塞。然后当后面线程执行完之后才可能被执行join函数。所以这样写是同步的。
  但是如果是这样子呢。

std::vector<std::thread *>lt;

 for(int i = 35 ; i >20 ; i--)
{
  std::thread *t= new thread(show,std::to_string(i)+"ccccc");
t->join();
  lt.emplace_back(t);
}

  这样子应该是顺序执行了吧,我测试的结果是可能后面都没有开起来多的线程,而是优化成了顺序执行。根本没有并行执行

最新文章

  1. python enumerate 用法
  2. 使用 Device Mapper来改变Docker容器的大小
  3. 极简Word排版示例(以Word2013为例)
  4. mysql 查询优化规则
  5. 团队开发——冲刺1.c
  6. genymotion虚拟机启动失败
  7. 禁止用户自己停止SEP - 飞舞的菜刀 - 51CTO技术博客
  8. css定义的权重
  9. .NET Core 1.0.0 RC2
  10. tcp异常终止连接
  11. IIS 和 各个协议
  12. 不依赖浏览器控制台的JavaScript断点调试方法
  13. IIC-BUS INTERFACE
  14. spring配置文件一般结构
  15. MacBook 经常使用快捷键
  16. TCP/IP,Web世界的基本规则
  17. 了解unix操作系统发展阶段
  18. ue4网络同步概念笔记
  19. 安装ORACLE高可用RAC集群11g校验集群安装的可行性输出信息
  20. [AWS] OAuth2.0

热门文章

  1. Linux(Ubuntu)使用日记------trash-cli防止误删文件
  2. centos7之zabbix服务器的常规优化
  3. 【MySQL 读书笔记】普通索引和唯一索引应该怎么选择
  4. SpringBoot自动装配源码解析
  5. LODOP中tfoot和tbody中间线连不起来
  6. BZOJ2127Happiness
  7. Java基础 -- 字符串(格式化输出、正则表达式)
  8. JS学习笔记Day17
  9. plsql 永久注册码适用个版本
  10. Lloyd’s 算法 和 K-Means算法