![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++11并发与多线程
文章平均质量分 87
胡胡浩特
这个作者很懒,什么都没留下…
展开
-
C++11并发与多线程笔记(13) 补充知识、线程池浅谈、数量谈、总结
第十三章 补充知识、线程池浅谈、数量谈、总结一、补充一些知识点1.1 虚假唤醒:notify_one或者notify_all唤醒wait()后,实际有些线程可能不满足唤醒的条件,就会造成虚假唤醒,可以在wait中再次进行判断解决虚假唤醒。解决:wait中要有第二个参数(lambda),并且这个lambda中要正确判断所处理的公共数据是否存在。2.2 atomic:std::atomic<int> atm = 0; cout << atm << endl;原创 2020-05-13 11:06:34 · 3388 阅读 · 1 评论 -
C++11并发与多线程笔记(12) windows临界区、其他各种mutex互斥量
第十二节 windows临界区、其他各种mutex互斥量一和二、windows临界区Windows临界区,同一个线程是可以重复进入的,但是进入的次数与离开的次数必须相等。C++互斥量则不允许同一个线程重复加锁。windows临界区是在windows编程中的内容,了解一下即可,效果几乎可以等同于c++11的mutex包含#include <windows.h>windows中的临界区同mutex一样,可以保护一个代码段。但windows的临界区可以进入多次,离开多次,但是进入的次数与原创 2020-05-13 11:03:21 · 2892 阅读 · 0 评论 -
C++11并发与多线程笔记(11) std::atomic续谈、std::async深入谈
第十一节 std::atomic续谈、std::async深入谈一、std::atomic续谈#include <iostream>#include <thread>#include <atomic>using namespace std;std::atomic<int> g_count = 0; //封装了一个类型为int的 对象(值) void mythread1() { for (int i = 0; i < 1000000;原创 2020-05-13 10:58:56 · 2489 阅读 · 2 评论 -
C++11并发与多线程笔记(10) future其他成员函数、shared_future、atomic
第十节 future其他成员函数、shared_future、atomic一、std::future 的成员函数1、std::future_status status = result.wait_for(std::chrono::seconds(几秒));卡住当前流程,等待std::async()的异步任务运行一段时间,然后返回其状态std::future_status。如果std::async()的参数是std::launch::deferred(延迟执行),则不会卡住主流程。std::futu原创 2020-05-13 10:54:46 · 3050 阅读 · 2 评论 -
C++11并发与多线程笔记(9) async、future、packaged_task、promise
第九节、async、future、packaged_task、promise本节内容需要包含头文件#include 一、std::async、std::future创建后台任务并返回值std::async是一个函数模板,用来启动一个异步任务,启动起来一个异步任务之后,它返回一个std::future对象,这个对象是个类模板。什么叫“启动一个异步任务”?就是自动创建一个线程,并开始 执行对应的线程入口函数,它返回一个std::future对象,这个std::future对象中就含有线程入口函数所返回原创 2020-05-13 10:44:45 · 4182 阅读 · 3 评论 -
C++11并发与多线程笔记(8) condition_variable、wait、notify_one、notify_all
第八节 condition_variable、wait、notify_one、notify_all一、条件变量condition_variable、wait、notify_one、notify_allstd::condition_variable实际上是一个类,是一个和条件相关的类,说白了就是等待一个条件达成。std::mutex mymutex1;std::unique_lock<std::mutex> sbguard1(mymutex1);std::condition_variab原创 2020-05-13 10:37:54 · 7161 阅读 · 8 评论 -
C++11并发与多线程笔记(7) 单例设计模式共享数据分析、解决,call_once
第七节 单例设计模式共享数据分析、解决,call_once1.设计模式程序灵活,维护起来可能方便,用设计模式理念写出来的代码很晦涩,但是别人接管、阅读代码都会很痛苦老外应付特别大的项目时,把项目的开发经验、模块划分经验,总结整理成设计模式中国零几年设计模式刚开始火时,总喜欢拿一个设计模式往上套,导致一个小小的项目总要加几个设计模式,本末倒置设计模式有其独特的优点,要活学活用,不要深陷其中,生搬硬套2.单例设计模式:整个项目中,有某个或者某些特殊的类,只能创建一个属于该类的对象。单例类:原创 2020-05-13 10:34:04 · 3991 阅读 · 1 评论 -
C++11并发与多线程笔记(6) unique_lock(类模板)详解
第六节 unique_lock(类模板)详解1.unique_lock取代lock_guardunique_lock比lock_guard灵活很多(多出来很多用法),效率差一点。unique_lock myUniLock(myMutex);2.unique_lock的第二个参数2.1 std::adopt_lock:表示这个互斥量已经被lock(),即不需要在构造函数中lock这个互斥量了。前提:必须提前locklock_guard中也可以用这个参数2.2 std::try_to_l原创 2020-05-13 10:26:42 · 5913 阅读 · 2 评论 -
C++11并发与多线程笔记(5)互斥量概念、用法、死锁演示及解决详解
第五节 互斥量概念、用法、死锁演示及解决详解一、互斥量(mutex)的基本概念互斥量就是个类对象,可以理解为一把锁,多个线程尝试用lock()成员函数来加锁,只有一个线程能锁定成功,如果没有锁成功,那么流程将卡在lock()这里不断尝试去锁定。互斥量使用要小心,保护数据不多也不少,少了达不到效果,多了影响效率。二、互斥量的用法包含#include 头文件2.1 lock(),unlock()步骤:1.lock(),2.操作共享数据,3.unlock()。lock()和unlock()原创 2020-05-13 10:15:17 · 6627 阅读 · 2 评论 -
C++11并发与多线程笔记(4) 创建多个线程、数据共享问题分析、案例代码
第四节 创建多个线程、数据共享问题分析、案例代码一、创建和等待多个线程void TextThread(){ cout << "我是线程" << this_thread::get_id() << endl; /* … */ cout << "线程" << this_thread::get_id() << "执行结束" << endl; } //main函数里 vector原创 2020-05-13 10:08:06 · 6138 阅读 · 6 评论 -
C++11并发与多线程笔记(3) 线程传参详解,detach()大坑,成员函数做线程函数
第三节 线程传参详解,detach()大坑,成员函数做线程函数一、传递临时对象作为线程参数1.1要避免的陷阱1:#include <iostream>#include <thread>using namespace std;void myPrint(const int &i, char* pmybuf){ //如果线程从主线程detach了 //i不是mvar真正的引用,实际上值传递,即使主线程运行完毕了,子线程用i仍然是安全的,但仍不推荐传递引用 /原创 2020-05-13 10:04:17 · 8737 阅读 · 7 评论 -
C++11并发与多线程笔记(2) 线程启动、结束,创建线程多法、join,detach
第二节 线程启动、结束,创建线程多法、join,detach一、范例演示线程运行的开始程序运行起来,生成一个进程,该进程所属的主线程开始自动运行;当主线程从main()函数返回,则整个进程执行完毕主线程从main()开始执行,那么我们自己创建的线程,也需要从一个函数开始运行(初始函数),一旦这个函数运行完毕,线程也结束运行整个进程是否执行完毕的标志是:主线程是否执行完,如果主线程执行完毕了,就代表整个进程执行完毕了,此时如果其他子线程还没有执行完,也会被强行终止【此条有例外,以后会解释】创建原创 2020-05-13 09:56:44 · 11398 阅读 · 10 评论 -
C++11并发与多线程笔记(1) 并发基本概念及实现,进程、线程基本概念
一 并发基本概念及实现,进程、线程基本概念一、并发、进程、线程的基本概念和综述并发,线程,进程要求必须掌握1.1 并发两个或者更多的任务(独立的活动)同时发生(进行):一个程序同时执行多个独立的任务;以往计算机,单核cpu(中央处理器):某一个时刻只能执行一个任务,由操作系统调度,每秒钟进行多次所谓的“任务切换”。并发的假象(不是真正的并发),切换(上下文切换)时要保存变量的状态、执行进度等,存在时间开销;随着硬件发展,出现了多处理器计算机:用于服务器和高性能计算领域。台式机:在一块芯片上有原创 2020-05-13 09:49:20 · 12498 阅读 · 1 评论