
C++
文章平均质量分 73
Electro1ux
这个作者很懒,什么都没留下…
展开
-
C++并发与多线程(十二)虚假唤醒、原子操作再谈、线程池
虚假唤醒notify_one或者notify_all唤醒wait()后,实际有些线程可能不满足唤醒的条件,就会造成虚假唤醒,可以在wait中再次进行判断解决虚假唤醒。解决:wait中要有第二个参数(lambda),并且这个lambda中要正确判断所处理的公共数据是否存在。m_cond.wait(myUnique, [this] { //一个lamda表达式就是一个可调用对象(函数) if (!msgRecvQueue.empty()) { return true; }原创 2021-02-02 15:57:11 · 585 阅读 · 0 评论 -
C++并发与多线程(十一)windows临界区、recursive_mutex、timed_mutex
windows临界区windows临界区是在windows编程中的内容,了解一下即可,效果几乎可以等同于c++11的mutex;windows编程仅能在windows操作系统中使用,其它环境(例如linux)是不能正常运行的。使用方法://包含头文件#include <Windows.h>CRITICAL_SECTION m_winsec; //windwos临界区定义InitializeCriticalSection(&m_winsec); //windows临界区使用原创 2021-02-02 12:28:10 · 466 阅读 · 0 评论 -
C++并发与多线程(十) async深入理解
std::async参数详叙async用来创建一个异步任务。async一般不认为是创建一个线程(虽然也是创建了线程),一般认为是创建了一个异步任务。延迟调用参数std::launch::deferred【延迟调用】std::launch::async【强制创建一个线程】1.如果用std::launch::deferred来调用async?延迟到调用 get() 或者 wait() 时执行,如果不调用就不会执行2.如果用std::launch::async来调用async?强制这个异原创 2021-02-01 18:44:10 · 1759 阅读 · 0 评论 -
C++并发与多线程(九)future_status、shared_future、atomic
文章目录future_statusstd::shared_futurestd::atomicfuture_statusstd::future_status status = result.wait_for(std::chrono::seconds(1)); //等待1s卡住当前流程,等待std::async()的异步任务运行一段时间,然后返回其状态std::future_status。如果std::async()的参数是std::launch::deferred(延迟执行),则不会卡住主流程。std原创 2021-02-01 16:33:23 · 456 阅读 · 0 评论 -
C++并发与多线程(八) async、future、packaged_task、promise
文章目录std::async、std::future创建后台任务并返回值std::asyncstd::futurestd::launchstd::packaged_taskstd::promisestd::async、std::future创建后台任务并返回值std::asyncstd::async是一个函数模板,用来启动一个异步任务,启动起来一个异步任务之后,它返回一个std::future对象,这个对象是个类模板。异步任务:自动创建一个线程,并开始 执行对应的线程入口函数,它返回一个std:原创 2021-01-31 19:40:36 · 352 阅读 · 0 评论 -
C++并发与多线程(七) condition_variable、wait、notify_one、notify_all
条件变量condition_variablecondition_variable是一个和条件相关的类,本质上就是等待一个条件达成。使用的时候必须和互斥量mutex配合使用。使用场景:增加效率//把消息从消息队列取出 void outMsgRecvQueue() { int command = 0; //指令为command; for (int i = 0; i < 10000; i++) { bool result = outMsgLULProc(command); //将所有对原创 2021-01-31 10:03:17 · 891 阅读 · 0 评论 -
C++并发与多线程(六) 单例设计模式、call_once
文章目录单例设计模式单例模式实现方法单例模式下的delete单例设计模式下的共享数据问题call_once()单例设计模式单例:整个项目中,有某个或者某些特殊的类,属于该类的对象,只能创建一个,不允许创建多个。单例模式实现方法//单例类class MyCAS {private: //构造函数私有化,就不可以实例化对象了 MyCAS() {};private: static MyCAS *m_instance; //静态成员变量,用于实例化单例类public: //提供的实例化对象接口原创 2021-01-30 17:20:22 · 269 阅读 · 0 评论 -
C++并发与多线程(五) unique_lock用法
C++并发与多线程(六) unique_lock用法详解原创 2021-01-29 11:02:52 · 1465 阅读 · 0 评论 -
C++并发与多线程(四)互斥量的用法、死锁的处理
互斥量mutex互斥量就是个类对象,可以理解为一把锁,多个线程尝试用lock()成员函数来加锁,只有一个线程能锁定成功,如果没有锁成功,那么流程将卡在lock()这里不断尝试去锁定。互斥量使用要注意,保护数据不要多也不要少,少了达不到效果,多了影响效率。互斥量用法:#include < mutex > //包含头文件先lock(),操作共享数据;unlock()释放锁;lock()和unlock()必须成对使用;例子代码://包含头文件#include <mute原创 2021-01-28 15:18:59 · 319 阅读 · 0 评论 -
C++并发与多线程(三) 创建多个线程
C++并发与多线程学习笔记:创建多个线程原创 2021-01-27 17:46:28 · 1283 阅读 · 3 评论 -
C++并发与多线程(二) 传递临时对象做线程参数
C++并发与多线程(二) 传递临时对象做线程参数遇到的一些问题原创 2021-01-26 16:33:14 · 735 阅读 · 0 评论 -
C++并发与多线程(一)线程的创建与退出、join、detach理解
C++并发与多线程(一)线程的创建和退出、join、detach理解原创 2021-01-25 16:52:15 · 2824 阅读 · 1 评论 -
C++ set/ multiset 容器用法
C++ set容器的用法记录,方便查阅原创 2021-01-24 15:11:02 · 177 阅读 · 0 评论 -
C++ list容器用法
C++ list容器用法,记录一下方便查阅原创 2021-01-23 09:36:40 · 421 阅读 · 0 评论 -
C++ stack和queue容器用法
C++ stack、queue容器用法,记录一下方便查阅原创 2021-01-22 16:31:32 · 309 阅读 · 0 评论 -
C++ deque用法
C++ deque用法,记录一下方便以后查阅原创 2021-01-22 15:48:37 · 902 阅读 · 0 评论 -
C++ Vector容器用法
C++ vector容器的用法,记录一下方便查阅原创 2021-01-22 12:13:36 · 7737 阅读 · 0 评论 -
C++ String的用法
C++中String的用法,记录一下方便查阅原创 2021-01-21 17:50:03 · 310 阅读 · 0 评论 -
C++ 虚函数理解
https://coolshell.cn/articles/12165.html原创 2021-01-20 17:25:43 · 316 阅读 · 0 评论 -
C++ 公有、保护、私有继承
原创 2021-01-20 09:58:49 · 124 阅读 · 0 评论 -
C++ 子类继承和调用父类的构造函数方法
子类的构造函数构造方法用来初始化类的对象,与父类的其它成员不同,它不能被子类继承(子类可以继承父类所有的成员变量和成员方法,但不继承父类的构造方法)。因此,在创建子类对象时,为了初始化从父类继承来的数据成员,系统需要调用其父类的构造方法。如果没有显式的构造函数,编译器会给一个默认的构造函数,并且该默认的构造函数仅仅在没有显式地声明构造函数情况下创建。子类构造函数的调用规则1. 如果子类没有定义构造方法,则调用父类的无参数的构造方法。2. 如果子类定义了构造方法,不论是无参数还是带参数,在创建子类原创 2021-01-19 11:01:00 · 1244 阅读 · 0 评论 -
C++ 深拷贝与浅拷贝
深拷贝与浅拷贝的区别深拷贝和浅拷贝本质的区别在于浅拷贝获取的是原对象的引用,深拷贝获取的是原对象的复制实体。浅拷贝:简单的赋值拷贝操作深拷贝:在堆区重新申请空间,进行拷贝操作为什么要使用深拷贝C++编译器默认的拷贝构造函数都是浅拷贝。浅拷贝在类中存在指针的时候,拷贝的是原对象的引用,这会带来一个问题:在对象退出的时候,会调用析构函数对申请的堆内存进行释放,如果是默认的浅拷贝,两次析构函数会对同一个空间进行释放,这会报错。为了避免浅拷贝的这个问题,必须使用深拷贝:拷贝构造函数重新申请一个内存原创 2021-01-18 18:54:31 · 192 阅读 · 0 评论 -
C++ 指针常量与常量指针
指针常量与常量指针指针常量指针本身是个常量,const紧跟着p,const修饰的是p,p的内容(也就是地址)不可修改。/*指针常量的例子*/int a,b; int * const p; p = &a; //正确 p = &b; //错误 *p = 20; //正确 常量指针指向常量的指针,const紧跟的是 *p,修饰的是 *p,也就是 *p的值不可修改/*常量指针的例子*/int a,b; int const *p; p = &a;//正确 p原创 2021-01-16 16:02:24 · 111 阅读 · 0 评论