C++11 thread使用
- 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使用相关推荐
- c++11 thread类的简单使用
一个thread对象就代表一个线程执行,当对象创建完成后,线程函数就开始执行,下面这段话是c++11的thread类介绍. An initialized thread object represent ...
- g++编译c++11 thread报错问题 及c++多线程操作
测试代码thread.cpp #include <thread> #include <iostream> using namespace std;void run(int n) ...
- c++11 thread
c++11在语言层面上提供了对thread的支持,由于不同的平台提供了不同线程API,在语言层面提供了对thread的支持可以大大的减小代码移植的工作量. thread的构造函数参数为函数名和可变参数 ...
- c++11 thread 类内使用方法和跨类使用方法
忘了为啥之前查的用上bind了,把项目搞完之后终于有时间建个小工程仔细试下怎么用. Case 1 : 根据类内函数创建thread class A { public: A(); ~A(); voi ...
- c++11多线程学习笔记之一 thread基础使用
没啥好讲的 c++11 thread类的基本使用 #include "stdafx.h" #include <iostream> #include <thre ...
- 05用线程类Thread开启线程
1.,密封类不能被继承 (thread) l类的内部的开启了,没有参数 2.要有参数 一定是object类型,(记住了) 3.自己创造线程 没有参数的时候 4.自己创造线程 有参数 用Thread开启 ...
- muduo之Thread
muduo也对线程进行了封装,下面看一下实现. Thread.h // Use of this source code is governed by a BSD-style license // th ...
- java 线程 Thread 使用介绍,包含wait(),notifyAll() 等函数使用介绍
(原创,转载请说明出处!谢谢--http://www.cnblogs.com/linguanh/) 此文目的为了帮助大家较全面.通俗地了解线程 Thread 相关基础知识! 目录: --线程的创建: ...
- Thread类源码剖析
目录 1.引子 2.JVM线程状态 3.Thread常用方法 4.拓展点 一.引子 说来也有些汗颜,搞了几年java,忽然发现竟然没拜读过java.lang.Thread类源码,这次特地拿出来晒一晒. ...
最新文章
- 徐韬:CCF - 个贷违约预测Baseline
- Java Timer定时器 使用
- Python的try... excep异常捕捉机制
- Java NIO3:缓冲区Buffer
- oracle导入dmp文件加条件,oracle 导入DMP文件时IMP-00013: 只有 DBA 才能导入由其他 DBA 导出的文件...
- XDeepFM高阶特征交互,特征交互:一种极深因子分解机模型
- C#之异步导致内存泄漏
- 【渝粤教育】广东开放大学 网络编程 形成性考核 (39)
- linux电子教室软件,在Deepin Linux系统下安装和设置Veyon多媒体电子教室的方法
- 【Qt】运行报错Could not create directory “E:\xxxx-Debug“
- python脚本之对文件进行哈希校验
- c语言指针选择题库及答案,C语言指针练习习题及答案.doc
- 解析:为什么程序员应该有一台Mac个人电脑?
- 【mongodb】连接报错Prematurely reached end of stream
- 守法公民 Law Abiding Citizen (2009)
- python数据分析的交叉分析和分组分析 -第三次笔记
- 天河二号超级计算机能买到吗,天河二号计算机是巨型机吗
- 如何简单的运营企业群呼系统呼叫中心系统
- linux挂载硬盘错误,开机后无法进入系统
- 关于浙江22年下半年教师资格证面试报名注册时间