![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++编程
知无涯99
保密
展开
-
c++11多线程7-异步线程
异步线程异步线程的引入解决了线程有依赖关系的情景。c++11提供了std::async,std::packaged_task,std::promise,三种方法。1.std::asyncstd::async启动一个异步的任务,并返回一个std::future对象,可以通过future对象获取到异步任务的执行结果。async的第一个参数的选择:std::launch::deferred(默...原创 2019-10-22 21:20:30 · 921 阅读 · 0 评论 -
C++多线程6-条件变量
1.条件变量std::condition_variable是多线程中经常用到的一个类,它的头文件为condition_variable。它常用的成员函数包括,wait,notify_one,notify_all等。它通过wait函数进行条件判断是否阻塞,当wait阻塞后由notify_one,notify_all函数进行唤醒。2.wait成员函数wait的函数它有两个形参,第二个形参可选(默...原创 2019-10-16 21:56:16 · 209 阅读 · 0 评论 -
C++多线程5-单例模式详解
单例模式:只允许创建一个类对象,实现的关键是将构造函数变为私有。单例模式有几种实现方式:懒汉模式饿汉模式线程安全模式局部静态变量模式1.懒汉模式当需要使用类对象时,才去申请堆空间,避免内存浪费,这样的方式会引入两个问题,一个就是在多线程的运用场景下有可能多次申请空间去创建对象造成异常,为了解决这个问题引入了线程安全模式;另外一个就是如何释放堆空间的问题,我们在线程安全模式下再讲解...原创 2019-09-20 21:07:13 · 557 阅读 · 0 评论 -
c++多线程1-多线程的创建
什么是多线程?我们可以理解为一个线程执行一个代码段,所以多个线程就是执行多个代码段,当一个线程结束后,进程就退出了,这个线程我们称之为主线程。每个进程可以有一个或一个以上的线程,但只有一个主线程,我们暂且理解主线程为main函数。在多核CPU中,多线程的程序比单线程的运行效率高,因此开启线程的个数,理想情况下是根据CPU的核数来定。linux查看线程的命令:linux查看线程的命令:root...原创 2019-09-22 17:17:02 · 196 阅读 · 0 评论 -
c++多线程2-线程参数传递需要注意的几个问题
一.线程的初始化参数需要注意一下几个问题:1.回调函数使用引用参数接收值时,必须声明为const,否则报错;(线程基于数据安全保护的考虑)2.回调函数必须声明为指针,才能修改实参;3.对象隐式转换是在子线程中进行的;4.回调函数参数为非引用时,对象的拷贝是在子线程中进行的;二.使用detach需要注意的问题由上四点可以发现,使用detach需要注意的问题:1.传递对象时,建议用引用的...原创 2019-09-22 23:05:23 · 1221 阅读 · 0 评论 -
c++11-智能指针
c++智能指针为了更安全地管理动态内存,c++11引入了智能指针,提供了包括shared_ptr,unique_ptr,weak_ptr三种不同类型的智能指针。目录结构:一、三种指针介绍1.shared_ptr2.unique_ptr(待续)3.weak_ptr(待续)二、智能指针的基本使用1.创建shared_ptr对象的两种方法2.智能指针的使用3.引用计数4.复位引用计...原创 2019-09-24 09:26:24 · 435 阅读 · 1 评论 -
C++多线程3-共享数据操作保护
目录:1.多线程操作共享数据引出的问题2.解决多线程操作共享数据的方法:锁3.互斥量mutex的概念和用法4.lock普通锁的用法5.lock_guard类模板的用法6.死锁的概念和解决7.unique_lock的用法1.多线程操作共享数据引出的问题//我们用Test::set函数中作为多线程的回调函数,在这个回调函数中打印vector的size,发现它会出现段错误。#incl...原创 2019-09-24 23:21:36 · 582 阅读 · 0 评论 -
C++多线程4-unique_lock详解
unique_lock和lock_guard都是可以自动解锁的类,但是lock_guard更加高效体现在永远在析构函数中解锁,而unique_lock更加灵活,但执行效率会比lock_guard低一些,它们都是有不同的应用场景。unique_lock是通用互斥包装器,允许延迟锁定、尝试锁定、递归锁定、所有权转移和条件变量一同使用;它可以移动mutex的所有权,但不可复制;1.unique_lo...原创 2019-10-11 15:50:32 · 461 阅读 · 0 评论