C ++ _多线程笔记
#include<iostream>
#include <thread>//创建线程需要添加的头文件
using namespace std;
/*thread join(阻塞:主等子) detach(主子分离) */
int main ()
{
return 0;
}
第三节:线程传参详解,detach()大坑,成员函数做线程函数
(1)传递临时对象作为线程函数
(1.1)要避免的陷阱(解释1)
(1.2)要避免的陷阱(解释2)
(1.3)总结
(2)临时对象作为线程参数继续讲
(2.1)线程ID的概念
(2.2)临时对象构造时机抓捕
(3)传递类对象、智能指针作为线程参数
(4)用成员函数指针做线程函数
第四节:创建多个线程、数据共享问题分析、案列代码
(1)创建和等待多个线程
(2)数据共享问题分析
(2.1)只读的数据-->是安全稳定的,不需要特别的处理手段,直接读就可以。
(2.2)有读有写
(2.3)其他案例
(3)共享数据的保护案例代码
代码编写:
创建和等待多个线程:
-----------------------------------------------------------------------------------------------------------
//线程入口函数(多个线程的入口函数)
void myPrint(int inum)
{
cout<<"myPrint线程开始执行了!!!!,线程编号 = "<<inum << endl;
//......干各种事情
cout<< "myPrint线程结束执行了!!!!,线程编号 = "<<inum <<endl;
return ;
}
int main ()
{
//一、创建和等待多个线程
vector <thread> mythreads;
//创建10个线程,线程入口函数同一使用myPrint
for (int i = 0;i< 10;i++)
{
mythreads.push_back(thread(myPrint,i));//创建10 个线程,同时这10 个线程已近开始执行
}
for(auto iter = mythreads.begin();iter != mythreads.end();++iter)
{
iter->join();//等待10 个线程都返回
}
cout << "I LOVe "<<endl;
}
--------------------------------------------------------------------------------------------------------
总结a:多个线程执行顺序是乱的,跟操作系统内部对线程的运行调度机制有关
b:主线程等待所有子线程运行结束,最后主线程结束,老师推荐这种join的写法,跟容易写出稳定的程序,
c:咱们把thread对象放入容器管理,看起来像个thread对象数组,这对我们一次创建大量的线程并对大量线程进行管理很方便。
第五节:互斥量概念、用法、死锁演示及解决详解
(1)互斥量的基本概念
(2)互斥量的用法
(2.1)lock \unlock
(2.2) std :: lock_guard ()类模板-->自动上解锁
(3)死锁
(3.1)死锁演示
(3.2)死锁的一般解决方案-->顺序一致
(3.3)std::lock() 函数模板
(3.4)std::lock_guardde std::adopt_lock参数
第六节:unique_lock 详解
(1)unique_lock 取代lock_quard
(2)unique_lock的第二个参数
(2.1)std::adopt_lock
(2.2)std::try_to_lock
(2.3)std::defer_lock
(3)unique_lock的成员函数
(3.1)lock()
(3.2)unlock()
(3.3)try_lock()
(3.4)release()
(4)unique_lock 所有权的传递
第七节 单例设计模式共享数据分析、解决、call_once
(1)设计模式大概谈
(2)单例设计模式
(3)单例设计模式共享数据问题分析,解决
(4)std::call_once()
第八节 conditition_variable 、wait、notify_one 、notify_all
(1)条件变量std::conditition_variable、 wait()、 notify_one()
(2)上述代码深入思考
(3)notify_all()
第九节 async 、future 、packaged_task、promise
(1)std::async、 std::future创建后台任务并返回值
(2)std::packaged_task
(3)std::promise
(4)小结
第十节 future 其他的成员函数 、 shared_future 、 atomic
(1)std::future的其他成员函数
(2)std::shared_future
(3)原子操作std::atomic
(3.1)原子操作概念引出范例
(3.2)基本的std::atomic 用法范例
(3.3)老师的心得
第十一节 std::atomic续谈、std::async 深入谈
(1)原子操作std::atomic续谈
(2)std::async 深入谈
(2.1)std::async 参数详述
(2.2)std::async 和std::thread 的区别
(2.3)std::async 不确定性问题的解决
第十二节Windows临界区、其他各种mutex互斥量
(1)Windows临界区
(2)多次进入临界区试验
(3)自动析构技术
(4)recursive_mutex 递归的独占互斥量
(5)带超时的互斥量std::timed_mutex和std::recursive_timed_mutex
第十三节 补充知识、线程池浅谈、数量谈、总结
(1)补充一些知识点
(1.1)虚假唤醒
(1.2)atomic
(2)浅谈线程池
(2.1)场景设想
(2.2)实现方式
(3)线程创建数量谈
(4)C++多线程总结
C ++ _多线程笔记的更多相关文章
- 2016/1/25 多线程 作业 方法一 继承Thread 方法二 实现Runnable 多线程笔记
/* * 1,尝试定义一个继承Thread类的类,并覆盖run()方法, * 在run()方法中每隔100毫秒打印一句话.*/ package Stream; //方法一 继承Thread 实现多线程 ...
- bayaim_java_入门到精通_听课笔记bayaim_20181120
------------------java_入门到精通_听课笔记bayaim_20181120--------------------------------- Java的三种技术架构: JAVAE ...
- 【笔记目录2】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总
当前标签: ASP.NET Core快速入门 共2页: 上一页 1 2 任务27:Middleware管道介绍 GASA 2019-02-12 20:07 阅读:15 评论:0 任务26:dotne ...
- Java oop 第13章_多线程
第13章_多线程 一. 多线程相关的概念: 程序:由某种编程语言开发可执行某些功能的代码组合,它是静态的概念. 进程:当程序被执行时的过程可以理解为讲程序从外存调入内存的过程,会为每一个程序 ...
- 【Java】多线程_学习笔记
多线程 1.进程 进程:当一个程序进入内存运行时,它就成为了进程.进程具有独立性.动态性.并发性. A.独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每一个进程都拥有自己私有的地址空间 ...
- Java精选笔记_多线程(创建、生命周期及状态转换、调度、同步、通信)
线程概述 在应用程序中,不同的程序块是可以同时运行的,这种多个程序块同时运行的现象被称作并发执行. 多线程可以使程序在同一时间内完成很多操作. 多线程就是指一个应用程序中有多条并发执行的线索,每条线索 ...
- (1/18)重学Standford_iOS7开发_iOS概述_课程笔记
写在前面:上次学习课程对iOS还是一知半解,由于缺乏实践,看公开课的视频有时不能很好地领会知识.带着问题去学习永远是最好的方法,接触一段时间iOS开发以后再来看斯坦福iOS公开课,又会有许多新的发现, ...
- Java基础知识强化之多线程笔记01:多线程基础知识(详见Android(java)笔记61~76)
1. 基础知识: Android(java)学习笔记61:多线程程序的引入 ~ Android(java)学习笔记76:多线程-定时器概述和使用
- 多线程笔记 - provider-consumer
通过多线程实现一个简单的生产者-消费者案例(笔记). 首先定义一个要生产消费的数据类 : public class Data { private String id; private String n ...
随机推荐
- 开源一个基于dotnet standard的轻量级的ORM框架-Light.Data
还在dotnet framework 2.0的时代,当时还没有EF,而NHibernate之类的又太复杂,并且自己也有一些特殊需求,如查询结果直接入表.水平分表和新增数据默认值等,就试着折腾个轻量点O ...
- 笔记:重新认识CSS3
1.CSS3边框 border-radius box-shadow border-image 2.CSS3背景 background-image background-size background- ...
- bzoj 5017 [Snoi2017]炸弹
题面 https://www.lydsy.com/JudgeOnline/problem.php?id=5017 题解 如果数据范围小一点那么就缩点 然后跑一个基础的DAG上的dp就好了 但是边数是$ ...
- (转) ACM必备(学完一个就加亮一个)不多,就这些!
时间复杂度(渐近时间复杂度的严格定义,NP问题,时间复杂度的分析方法,主定理)排序算法(平方排序算法的应用,Shell排序,快速排序,归并排序,时间复杂度下界,三种线性时间排 序,外部排序)数论(整 ...
- Android-apk文件反编译
一:工具介绍及下载 1:apktool 作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看 2:dex2jar 作用:将apk反编译成java源码(classes ...
- [已读]基于MVC的Javascript Web 富应用开发
这本书是12年出版,我买的时间应该是13年,书架上唯一一本盗版→ → 但是看完是在今年. 因为刚拿到的时候,读起来很是磕磕绊绊,就搁置了蛮久.到第二次拿起来的时候,发现已经有部分内容过时,但我还是觉得 ...
- 使用Appache部署WEB服务器
Apache的起源(这个就不说了,百度下就都有了) 简介:Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的网页服务器,可以在大多数计算机操作系统中运行, ...
- ASP.NET MVC Identity 兩個多個連接字符串問題解決一例
按照ASP.NET MVC Identity建立了一個用戶權限管理模塊,由于還要加自己已有的數據庫,所以建立了一個實體模型,建立了之后,發現登錄不了: 一直顯示“Login in failed for ...
- LN : leetcode 486 Predict the Winner
lc 486 Predict the Winner 486 Predict the Winner Given an array of scores that are non-negative inte ...
- CF622C Not Equal on a Segment
题目链接: http://codeforces.com/problemset/problem/622/C 题目大意: 给定一个长度为n(n不超过200000)的序列,有m(m不超过200000)次询问 ...