C++11多线程
陌离
这个作者很懒,什么都没留下…
展开
-
future其他成员函数、shared_future、atomic
一.future的其他成员函数wait_for()#include <bits/stdc++.h>#include <thread>#include <mutex>#include <condition_variable>#include <future>using namespace std;class A{ ...原创 2020-03-28 15:57:11 · 280 阅读 · 0 评论 -
async、future、packaged_task、promise
一.async、future创建后台任务并返回值希望线程返回一个结果std::async是个函数模板,用来启动一个异步任务。什么叫“启动一个异步任务”,就是自动创建一个线程并开始执行对应的线程入口函数,它返回一个std::future对象,这个std::future对象里面就含有线程函数返回的结果,我们可以通过调用std::future对象的成员函数get()来获取结果。当调用future对象...原创 2020-03-24 16:28:53 · 285 阅读 · 1 评论 -
条件变量
一.条件变量condition_variable、wait()、notify_one()condition_variable实际上是个类,是一个与条件相关的类,说白了就是等待一个条件的达成。这个类是需要和互斥量来配合工作的,用的时候我们要生成这个类的对象。实例代码:线程A:等待一个条件满足线程B:专门往消息队列扔消息(数据)wait():等一个条件的满足。如果第二个lambda表达式的返...原创 2020-03-23 18:15:54 · 407 阅读 · 0 评论 -
单例设计模式共享数据分析、解决
一.设计模式大概谈“设计模式”:代码的一些写法(这些写法跟常规写法不怎么一样):程序灵活,维护起来可能很方便,但是别人接管、阅读代码都会很痛苦。用“设计模式”理念写出的代码很晦涩的。《head first》讲设计模式,可以了解一下。老外为应付特别大的项目的时候,把项目的开发经验、模块划分经验,总结整理成设计模式(先有开发需求,后又理论总结和整理)设计模式拿到中国来,不太一样,拿着一个程序(...原创 2020-03-23 14:40:46 · 289 阅读 · 0 评论 -
unique_lock详解
一.unique_lock取代lock_guardunique_lock是个类模板,工作中,一般lock_guard(推荐使用);lock_guard取代了mutex的lock()和unlock();unique_lock比lock_guard灵活很多,效率上差一点,内存占用多一点。二.unique_lock的第二个参数1.adopt_lockadopt_lock其标志作用,表示这个互斥...原创 2020-03-23 13:06:57 · 2258 阅读 · 3 评论 -
互斥量概念、用法、死锁演示及解决详解
一.互斥量的概念保护共享数据,操作时,某个线程用代码把共享数据锁住、操作数据、解锁其他线程想操作共享数据必须等待解锁。互斥量:是个类对象,理解成一把锁,多个线程尝试用lock()来加锁,只有一个线程会加锁成功,成功的标志就是lock()返回,如果不成功,会一直阻塞在lock()处。互斥量使用要小心,保护数据不多也不能少,少了,没有达到保护的效果,多了,影响效率。二.互斥量的用法1.l...原创 2020-03-22 15:00:04 · 1029 阅读 · 0 评论 -
创建多个线程、数据共享问题
一.创建和等待多个线程多个线程执行的顺序是乱的,与操作系统内部对线程的调度机制有关。主线程会等待所有的线程运行结束,最后主线程结束。把thread对象放入容器里面管理,这对一次创建大量的线程并对线程进行管理很方便。#include <bits/stdc++.h>#include <thread>using namespace std;void myPri...原创 2020-03-22 13:26:31 · 203 阅读 · 0 评论 -
多线程传参
一.传递临时对象作为线程参数1.要避免的陷阱1)用detach()时,如果主线程先结束,变量就会被回收;所以用detach()的话,不推荐用引用,同时绝对不能用指针。#include <bits/stdc++.h>#include <thread>using namespace std;void myPrint(const int& i, char* p...原创 2020-03-21 17:26:02 · 569 阅读 · 0 评论 -
线程启动、结束、创建线程多个方法,join和detach
一.线程运行的开始和结束主线程从main()函数开始执行,因此我们自己创建的线程,也需要从一个函数函数开始运行(初始函数),一旦这个函数执行完毕,就代表我们的线程运行结束。整个进程是否执行完毕的标记:主线程是否执行完毕。一般情况下,如果主线程运行完毕,而子线程还没运行完成,则这些子线程就会被操作系统强行终止,因此如果想保持子线程的运行状态的话,就要让主线程一直保持运行。—>这个有例外,...原创 2020-03-21 15:11:52 · 885 阅读 · 0 评论 -
并发基本概念及实现,进程、线程基本概念
1.并发、进程、线程的基本概念并发:两个或者更多的任务同时的进行;在一个时刻可以同时执行多个独立的任务。对于单核CPU,某个时刻只能执行一个任务,由CPU进行调度,每秒进行多次所谓的任务切换,会造成并发的假象,每个任务在切换的时候,需要保存一定量的数据,以保证可以再次正确的执行到这个程序,称为上下文切换,这是有时间开销的。对于多核CPU,能够实现真正的并发,同一个时刻每一个CPU执行一个任务...原创 2020-03-21 13:05:51 · 320 阅读 · 0 评论