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>的使用相关推荐

  1. C++11多线程,thread库; mutex类,成员函数lock(), unlock();unique_lock<mutex>模板类

    文章目录 进程和线程 1. 进程 2. 线程 C++11多线程编程 1. C++11新标准 2. 创建线程 1. 普通函数 2. 仿函数 3. 成员函数 4. 多线程数据保护(数据一致性) 进程和线程 ...

  2. C++ 多线程的创建和使用

    最近使用C++11 的 std::thread比较多,这里开始好好地总结一下. 官方的参考文档:https://en.cppreference.com/w/cpp/thread/thread 大佬的博 ...

  3. Win32 多线程的创建方法,区别和联系

    2019独角兽企业重金招聘Python工程师标准>>> Win32多线程的创建方法主要有: CreateThread() _beginthread()&&_begin ...

  4. java线程的创建与执行_Java多线程的创建和运行

    1.多线程的好处 多线程是一个很有用的东西,它使的系统可以同时运行多个任务,提高程序的执行效率.大家平时可能没有注意到,其实我们电脑能同时执行多个程序的基本原理就是多线程. 每一个程序都是一个进程,而 ...

  5. MFC多线程的创建,包括工作线程和用户界面线程

    MFC多线程的创建 1.MFC多线程简介 MFC对多线程进行了一层简单的封装,在Visual C++中每个线程都是从CWinThread类继承而来的.每一个应用程序的执行都有一个主线程,这个主线程也是 ...

  6. java中多线程的创建方式一:

    //多线程的创建: //方式一:继承于Thread类的方式进行创建 //1.创建一个继承Thread类的子类 //2.重写Thread类中的run()方法–>将此线程执行的操作写在run方法中 ...

  7. linux下多线程的创建与等待详解 【转载】

    linux下多线程的创建与等待详解 http://blog.chinaunix.net/uid-23842323-id-2656572.html 所有线程都有一个线程号,也就是Thread ID.其类 ...

  8. 一篇文章认识4种Java多线程的创建方式

    Java4种多线程的创建: 什么是程序? 什么是进程? 什么是线程? 并行与并发: 那么JAVA多线程实现方式: (1)继承Thread类实现多线程: (2)实现Runnable接口方式实现多线程: ...

  9. Java 并发 多线程:创建线程的四种方式

    Java 并发 多线程: 创建线程的四种方式 继承 Thread 类并重写 run 方法 实现 Runnable 接口 实现 Callable 接口 使用线程池的方式创建 1. 通过继承 Thread ...

最新文章

  1. 【FFmpeg】函数详解(一)
  2. 成本管理系统开源_开源教科书如何降低大学成本
  3. 如何查询土地规划用途_一秒辨别“三无产品”,护肤品的猫腻如何发现?
  4. dubbo服务接口如何mock_2019年Dubbo你掌握的如何?快看看这30道高频面试题!
  5. java用redis缓存的步骤_详解在Java程序中运用Redis缓存对象的方法|chu
  6. 网站安全之为Web项目添加验证码功能(二)
  7. 解密朋友圈红包照片功能
  8. SharePoint And Ajax Technology(2):Ajax Control Toolkit学习
  9. Dev-C++下载教程,官网最新版
  10. python分析视频文件_FLV视频文件格式分析
  11. ie-此更新不适应于此电脑
  12. 安卓软件汉化教程附带汉化工具Android Res Edit V1.5
  13. 3个空手套白狼的经典案例,教你如何利用商业模式疯狂赚钱
  14. MyExcel 3.6.0 版本发布,支持列表模板混合导出
  15. LGP970刷机心得
  16. 使用华为光猫ONT使能工具后,本地主机如何通过Telnet登录光猫进行配置
  17. 11月YouTube全球视频点赞Top10 :碧梨、比伯、萌德、A妹神仙打架
  18. 实例004:这天第几天 输入某年某月某日,判断这一天是这一年的第几天?
  19. 互联网时代,你我皆楚门
  20. DA14531_定频发射测试

热门文章

  1. 阿里6年,我的技术蜕变之路!
  2. 轻量级Java持久化框架,Hibernate完美助手,Minidao 1.6.2版本发布
  3. Mysql查询优化——中间表方法优化count()统计大数据量总数问题
  4. Hadoop框架:HDFS高可用环境配置
  5. 大型网站的可伸缩性架构如何设计?
  6. LGP4173残缺的字符串
  7. 学习webpack4 - ES6语法转化
  8. 一次EXPDP数据泵性能问题诊断和调优
  9. C语言对结构体何时用- , 何时用.
  10. Centos eclipse打开文件自动退出