c++多线程并发可以帮助我们挖掘CPU的性能,在我们的思想中,似乎程序都是顺序执行的。这样的结论是建立在:程序是单线程程序。(比如我们平时写的hello world程序)。

但是如果程序是多线程的。那么这个结论就不成立了。先上代码:

 #include <iostream>
#include <thread>
#include <chrono> void foo()
{
std::cout << "foo is started\n";
std::this_thread::sleep_for(std::chrono::seconds());
std::cout << "foo is done\n";
} void bar()
{
std::cout << "bar is started\n";
std::this_thread::sleep_for(std::chrono::seconds());
std::cout << "bar is done\n";
} int main()
{
std::cout << "starting first helper...\n";
std::thread helper1(foo);
//std::cout << "thread helper1's ID:" << std::hex << helper1.get_id() <<std::endl; std::cout << "starting second helper...\n";
std::thread helper2(bar);
//std::cout << "thread helper1's ID:" << std::hex << helper2.get_id() << std::endl; std::cout << "waiting for helpers to finish...\n" << std::endl;
helper1.join();
helper2.join();
std::cout << "done!\n";
system("pause");
}

程序中: #include <thread>包含了线程类thread,例如程序的22行,就创建了新的线程 helper1,也就是创建新的线程是通过创建线程对象来实现的。也就是:main函数开始,就建立了一个线程,但是这里 又新开辟了一个独立的线程,而26行所示代码则又开辟了一个新的线程helper2。我们来直观看一下,这个程序的结果是什么:

可以看到,程序并没有在函数foo执行完毕后才执行bar,看起来更像是这两个线程是同时执行的(你可以去掉创建线程,然后就写普通的单线程调用实例来看看结果有何不同)

在此,总结三点:

1.多线程编程可以使得程序能够并发执行

2.多线程创建是通过thread类创建新的对象,也就是一个线程对象就表示为一个新的线程。

3.一个线程被销毁之前(析构函数被调用之前),必须要先结束该线程,这里的方式是join()方法,该方法会阻塞后续线程的执行。(也就是该线程不执行完,后续无法执行,当然也可以采用非阻塞的方式detach)

关于对多线程并发编程,更多的需要参考下面这位博主的文章:https://www.cnblogs.com/wangguchangqing/p/6134635.html,这篇文章形象而细致的介绍了初步的多线程编程。

最新文章

  1. GFF3格式文件
  2. maven2打包不同jdk版本的包
  3. HDU4511 小明系列故事——女友的考验(AC自动机 + DP)
  4. 未能加载文件或程序集Microsoft.ReportViewer.WebForms, Version=10.0.0.0
  5. Safari5及以下版本不支持Date的横杠字符串格式
  6. LINUX 产生PPM 驱动例子
  7. ORACLE性能优化之SQL语句优化
  8. java 基础(第一天)
  9. mybatis0209 二级缓存
  10. 第一章 Lambda表达式
  11. ios开发之IBOutlet和IBAction的区别
  12. sql(SqlServer)编程基本语法
  13. STL初步
  14. Java中的Math类的简单实用
  15. python3 第四章 - 输入与输出
  16. K8S Calico
  17. 对 String 字符串的理解
  18. jQuery跳转到页面指定位置
  19. 利用cygwin创建windows下的crontab定时任务
  20. JTAG - General description of the TAP Controller states

热门文章

  1. logstash split插件的使用(将一个事件拆分成多个事件)
  2. HDU4192 Guess the Numbers(表达式计算、栈)
  3. Go语言实现:【剑指offer】数字在排序数组中出现的次数
  4. ORB-SLAM2 论文&amp;代码学习 —— 概览
  5. kakfa+zookeeper集群搭建
  6. k8s系列---k8s认证及serviceaccount、RBAC
  7. codewars--js--Range Extraction
  8. SecureCRT的下载、安装( 过程非常详细!!值得查看)
  9. python 學習深淺拷貝、集合、、作用域、函數
  10. 清北学堂—2020.1提高储备营—Day 3(图论初步(二))