• C++11标准添加了thread.h头文件,对多线程类进行了封装,更易于用户去使用。
  • 简单介绍一下thread.h的使用

多线程的基本使用

  • 首先是最基础的调用多线程的方式
#include <iostream>
#include <thread>using namespace std;//简单的一个HelloWorld程序
void HelloWorld(int params)
{for (int i = 0; i < params; i++){cout << "Hello World! Num:" << i << " belong:" << params << endl;}
}int main()
{std::thread t(HelloWorld,12);std::cout << "Hello World!\n"; t.join();
}

调用该多线程比较方便,就是声明std::thread t(函数名,参数);即可调用了。
运行结果:


  • 进阶:开启两个多线程的情况
    代码:
// MultiThread.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include "pch.h"
#include <Windows.h>
#include <iostream>
#include <thread> //多线程类
#include <mutex> //线程互斥锁using namespace std;
std::mutex g_mtx; //简单互斥锁声明//简单的一个HelloWorld程序
void HelloWorld(int params)
{//g_mtx.lock();for (int i = 0; i < params; i++){cout << "Hello World! Num:" << i << " belong:" << params << endl;}//g_mtx.unlock();
}int main()
{std::thread t(HelloWorld,12);//std::thread::id  cur_id = t.get_id();std::thread t1(HelloWorld, 3);t.join();t1.join();
}

运行结果:

可以很容易的看出来开启两个两个多线程的情况下,同时访问两个资源,造成顺序不同。
接下来引入互斥锁的概念。

  • 互斥锁简单的来说,就是用来解决访问的问题,来实现一次仅能有一个资源被访问。
    代码:
// MultiThread.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include "pch.h"
#include <Windows.h>
#include <iostream>
#include <thread> //多线程类
#include <mutex> //线程互斥锁using namespace std;
std::mutex g_mtx; //简单互斥锁声明//简单的一个HelloWorld程序
void HelloWorld(int params)
{g_mtx.lock();for (int i = 0; i < params; i++){cout << "Hello World! Num:" << i << " belong:" << params << endl;}g_mtx.unlock();
}int main()
{std::thread t(HelloWorld,12);//std::thread::id  cur_id = t.get_id();std::thread t1(HelloWorld, 3);t.join();t1.join();
}
  • 简单的来说 互斥锁有三个步骤:
    1.初始化互斥锁: std::mutex g_mtx;
    2.加锁: g_mtx.lock()
    3.解锁:g_mtx.unlock()
    运行结果:

  • 很明显就能看出每次都只有一个资源访问,避免了线程同时访问资源的错误

多线程通信:
**************等待完善中-------

C++11 thread使用相关推荐

  1. c++11 thread类的简单使用

    一个thread对象就代表一个线程执行,当对象创建完成后,线程函数就开始执行,下面这段话是c++11的thread类介绍. An initialized thread object represent ...

  2. g++编译c++11 thread报错问题 及c++多线程操作

    测试代码thread.cpp #include <thread> #include <iostream> using namespace std;void run(int n) ...

  3. c++11 thread

    c++11在语言层面上提供了对thread的支持,由于不同的平台提供了不同线程API,在语言层面提供了对thread的支持可以大大的减小代码移植的工作量. thread的构造函数参数为函数名和可变参数 ...

  4. c++11 thread 类内使用方法和跨类使用方法

    忘了为啥之前查的用上bind了,把项目搞完之后终于有时间建个小工程仔细试下怎么用. Case 1 : 根据类内函数创建thread class A { public:  A();  ~A(); voi ...

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

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

  6. 05用线程类Thread开启线程

    1.,密封类不能被继承 (thread) l类的内部的开启了,没有参数 2.要有参数 一定是object类型,(记住了) 3.自己创造线程 没有参数的时候 4.自己创造线程 有参数 用Thread开启 ...

  7. muduo之Thread

    muduo也对线程进行了封装,下面看一下实现. Thread.h // Use of this source code is governed by a BSD-style license // th ...

  8. java 线程 Thread 使用介绍,包含wait(),notifyAll() 等函数使用介绍

    (原创,转载请说明出处!谢谢--http://www.cnblogs.com/linguanh/) 此文目的为了帮助大家较全面.通俗地了解线程 Thread 相关基础知识! 目录: --线程的创建: ...

  9. Thread类源码剖析

    目录 1.引子 2.JVM线程状态 3.Thread常用方法 4.拓展点 一.引子 说来也有些汗颜,搞了几年java,忽然发现竟然没拜读过java.lang.Thread类源码,这次特地拿出来晒一晒. ...

最新文章

  1. 徐韬:CCF - 个贷违约预测Baseline
  2. Java Timer定时器 使用
  3. Python的try... excep异常捕捉机制
  4. Java NIO3:缓冲区Buffer
  5. oracle导入dmp文件加条件,oracle 导入DMP文件时IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件...
  6. XDeepFM高阶特征交互,特征交互:一种极深因子分解机模型
  7. C#之异步导致内存泄漏
  8. 【渝粤教育】广东开放大学 网络编程 形成性考核 (39)
  9. linux电子教室软件,在Deepin Linux系统下安装和设置Veyon多媒体电子教室的方法
  10. 【Qt】运行报错Could not create directory “E:\xxxx-Debug“
  11. python脚本之对文件进行哈希校验
  12. c语言指针选择题库及答案,C语言指针练习习题及答案.doc
  13. 解析:为什么程序员应该有一台Mac个人电脑?
  14. 【mongodb】连接报错Prematurely reached end of stream
  15. 守法公民 Law Abiding Citizen (2009)
  16. python数据分析的交叉分析和分组分析 -第三次笔记
  17. 天河二号超级计算机能买到吗,天河二号计算机是巨型机吗
  18. 如何简单的运营企业群呼系统呼叫中心系统
  19. linux挂载硬盘错误,开机后无法进入系统
  20. 关于浙江22年下半年教师资格证面试报名注册时间

热门文章

  1. 设计一个安全对外的API接口,需要考虑哪些方面?
  2. 为并发而生的 ConcurrentHashMap,基于 Java8 分析
  3. 实战 RocketMQ 流量削峰,怎么能错过这一篇!
  4. 一个简单的例子带你理解HashMap
  5. 太极怎么用html写出来,如何用css实现太极图
  6. Python int() 函数
  7. empty()、isset()、is_null()的区别
  8. [学习笔记]扩展LUCAS定理
  9. PHP高级教程-高级过滤器
  10. 每天学一点ubuntu指令