c++:多线程的创建和unique_lock<mutex>的使用
1.多线程的创建
1)包括头文件
#include<thread>
#include<mutex>
2)新建线程
新建线程两个
使用thread 线程名来新建一个线程
并在线程中threadHello调用函数 void sayHello()
并在线程中threadWorld调用函数 void sayWorld()
//这里可以引入Windows头文件,然后使用Sleep()函数
#include <iostream>
#include<thread>
#include<unistd.h>
using namespace std;
void sayHello()
{while(1){sleep(1);cout<<endl<<"hello"<<endl;}}
void sayWorld()
{while(1){sleep(1);cout<<endl<<"world"<<endl;}
}
int main()
{thread threadHello(&sayHello);thread threadWorld(&sayWorld);threadHello.join();threadWorld.join();return 0;
}
2.线程的同步(unique_lock的使用)
unique_lock中的unique表示独占所有权。
unique_lock独占的是mutex对象,就是对mutex锁的独占。
用法:
(1)新建一个unique_lock 对象
(2)给对象传入一个std::mutex 对象作为参数;
std::mutex mymutex;
unique_lock lock(mymutex);
因此加锁时新建一个对象lock
unique_lock lock(mymutex);
而这个对象生命周期结束后自动解锁。
如下例子
#include <iostream>
//#include<thread>
#include <windows.h>
#include<mutex>
using namespace std;
std::mutex mymutex;
void sayHello()
{int k = 0;//unique_lock<mutex> lock(mymutex);while (k < 5){k++;cout << endl << "hello" << endl;Sleep(20);}
}
void sayWorld()
{//unique_lock<mutex> lock(mymutex);int k = 0;while (k < 5){cout << endl << "world" << endl;k++;Sleep(20);}
}
int main()
{thread threadHello(&sayHello);thread threadWorld(&sayWorld);threadHello.join();threadWorld.join();return 0;
}
上面试没有加锁的情况,输出如下:
加锁后输出如下:
c++:多线程的创建和unique_lock<mutex>的使用相关推荐
- C++11多线程,thread库; mutex类,成员函数lock(), unlock();unique_lock<mutex>模板类
文章目录 进程和线程 1. 进程 2. 线程 C++11多线程编程 1. C++11新标准 2. 创建线程 1. 普通函数 2. 仿函数 3. 成员函数 4. 多线程数据保护(数据一致性) 进程和线程 ...
- C++ 多线程的创建和使用
最近使用C++11 的 std::thread比较多,这里开始好好地总结一下. 官方的参考文档:https://en.cppreference.com/w/cpp/thread/thread 大佬的博 ...
- Win32 多线程的创建方法,区别和联系
2019独角兽企业重金招聘Python工程师标准>>> Win32多线程的创建方法主要有: CreateThread() _beginthread()&&_begin ...
- java线程的创建与执行_Java多线程的创建和运行
1.多线程的好处 多线程是一个很有用的东西,它使的系统可以同时运行多个任务,提高程序的执行效率.大家平时可能没有注意到,其实我们电脑能同时执行多个程序的基本原理就是多线程. 每一个程序都是一个进程,而 ...
- MFC多线程的创建,包括工作线程和用户界面线程
MFC多线程的创建 1.MFC多线程简介 MFC对多线程进行了一层简单的封装,在Visual C++中每个线程都是从CWinThread类继承而来的.每一个应用程序的执行都有一个主线程,这个主线程也是 ...
- java中多线程的创建方式一:
//多线程的创建: //方式一:继承于Thread类的方式进行创建 //1.创建一个继承Thread类的子类 //2.重写Thread类中的run()方法–>将此线程执行的操作写在run方法中 ...
- linux下多线程的创建与等待详解 【转载】
linux下多线程的创建与等待详解 http://blog.chinaunix.net/uid-23842323-id-2656572.html 所有线程都有一个线程号,也就是Thread ID.其类 ...
- 一篇文章认识4种Java多线程的创建方式
Java4种多线程的创建: 什么是程序? 什么是进程? 什么是线程? 并行与并发: 那么JAVA多线程实现方式: (1)继承Thread类实现多线程: (2)实现Runnable接口方式实现多线程: ...
- Java 并发 多线程:创建线程的四种方式
Java 并发 多线程: 创建线程的四种方式 继承 Thread 类并重写 run 方法 实现 Runnable 接口 实现 Callable 接口 使用线程池的方式创建 1. 通过继承 Thread ...
最新文章
- 【FFmpeg】函数详解(一)
- 成本管理系统开源_开源教科书如何降低大学成本
- 如何查询土地规划用途_一秒辨别“三无产品”,护肤品的猫腻如何发现?
- dubbo服务接口如何mock_2019年Dubbo你掌握的如何?快看看这30道高频面试题!
- java用redis缓存的步骤_详解在Java程序中运用Redis缓存对象的方法|chu
- 网站安全之为Web项目添加验证码功能(二)
- 解密朋友圈红包照片功能
- SharePoint And Ajax Technology(2):Ajax Control Toolkit学习
- Dev-C++下载教程,官网最新版
- python分析视频文件_FLV视频文件格式分析
- ie-此更新不适应于此电脑
- 安卓软件汉化教程附带汉化工具Android Res Edit V1.5
- 3个空手套白狼的经典案例,教你如何利用商业模式疯狂赚钱
- MyExcel 3.6.0 版本发布,支持列表模板混合导出
- LGP970刷机心得
- 使用华为光猫ONT使能工具后,本地主机如何通过Telnet登录光猫进行配置
- 11月YouTube全球视频点赞Top10 :碧梨、比伯、萌德、A妹神仙打架
- 实例004:这天第几天 输入某年某月某日,判断这一天是这一年的第几天?
- 互联网时代,你我皆楚门
- DA14531_定频发射测试