#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 ++ _多线程笔记的更多相关文章

  1. 2016/1/25 多线程 作业 方法一 继承Thread 方法二 实现Runnable 多线程笔记

    /* * 1,尝试定义一个继承Thread类的类,并覆盖run()方法, * 在run()方法中每隔100毫秒打印一句话.*/ package Stream; //方法一 继承Thread 实现多线程 ...

  2. bayaim_java_入门到精通_听课笔记bayaim_20181120

    ------------------java_入门到精通_听课笔记bayaim_20181120--------------------------------- Java的三种技术架构: JAVAE ...

  3. 【笔记目录2】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总

    当前标签: ASP.NET Core快速入门 共2页: 上一页 1 2  任务27:Middleware管道介绍 GASA 2019-02-12 20:07 阅读:15 评论:0 任务26:dotne ...

  4. Java oop 第13章_多线程

    第13章_多线程 一.   多线程相关的概念:  程序:由某种编程语言开发可执行某些功能的代码组合,它是静态的概念.   进程:当程序被执行时的过程可以理解为讲程序从外存调入内存的过程,会为每一个程序 ...

  5. 【Java】多线程_学习笔记

    多线程 1.进程 进程:当一个程序进入内存运行时,它就成为了进程.进程具有独立性.动态性.并发性. A.独立性:进程是系统中独立存在的实体,它可以拥有自己独立的资源,每一个进程都拥有自己私有的地址空间 ...

  6. Java精选笔记_多线程(创建、生命周期及状态转换、调度、同步、通信)

    线程概述 在应用程序中,不同的程序块是可以同时运行的,这种多个程序块同时运行的现象被称作并发执行. 多线程可以使程序在同一时间内完成很多操作. 多线程就是指一个应用程序中有多条并发执行的线索,每条线索 ...

  7. (1/18)重学Standford_iOS7开发_iOS概述_课程笔记

    写在前面:上次学习课程对iOS还是一知半解,由于缺乏实践,看公开课的视频有时不能很好地领会知识.带着问题去学习永远是最好的方法,接触一段时间iOS开发以后再来看斯坦福iOS公开课,又会有许多新的发现, ...

  8. Java基础知识强化之多线程笔记01:多线程基础知识(详见Android(java)笔记61~76)

    1. 基础知识: Android(java)学习笔记61:多线程程序的引入    ~    Android(java)学习笔记76:多线程-定时器概述和使用 

  9. 多线程笔记 - provider-consumer

    通过多线程实现一个简单的生产者-消费者案例(笔记). 首先定义一个要生产消费的数据类 : public class Data { private String id; private String n ...

随机推荐

  1. margin---bug

    常见的浏览器下margin出现的bug IE6中双边距Bug:发生场合:当给父元素内第一个浮动元素设置margin-left(元素float:left)或margin-right(元素float:ri ...

  2. UI:地图和定位

    参考学习链接 各种IOS设备可以使用 Core Location 框架确定它的物理位置.core location 主要使用三种技术来实现功能.GPS.蜂窝基站三角网络定位. wifi 定位服务.这三 ...

  3. #define WM_COMM_BREAK_DETECTED WM_USER+1

    一.#define WM_COMM_BREAK_DETECTED WM_USER+1定义一个用户自定义消息WM_COMM_BREAK_DETECTED,它是自定义消息,非系统消息 为了防止用户定义的消 ...

  4. JAVA基础-面向对象05

    一.面向对象的引入 解决问题的时候,首先要会分析思路,这个思路就是我们生活中解决一个问题的方法步骤: 有了思路之后,再把思路使用java代码来解决: 但是 计算总分的需求变了 分析:原来在一个程序中, ...

  5. Ruby基本语法

    更新: 2017/06/09 更新: 2017/06/20 cattr_accessor定义类变量,相当于@@ 更新: 2017/06/23 生成类的实例 更新: 2017/06/24 补充loop的 ...

  6. hdoj3714【三分】

    手动插姿势: 三分法可以应用于凸函数或者凹函数的求极值. 三分讲解:http://blog.csdn.net/pi9nc/article/details/9666627 三分模板:http://www ...

  7. 51nod 1050【DP】

    思路: 就是先正常的dp一下求一个最大连续子串,然后特殊情况就是sum-最小连续子串.. 比一比谁大谁小就好了 #include <stdio.h> #include <string ...

  8. bzoj 2599: [IOI2011]Race【点分治】

    点分治,用一个mn[v]数组记录当前root下长为v的链的最小深度,每次新加一个儿子的时候都在原来儿子更新过的mn数组里更新ans(也就是查一下mn[m-dis[p]]+de[p]) 这里注意更新和初 ...

  9. bzoj 4010: [HNOI2015]菜肴制作【拓扑排序】

    也就是给定有向图,求最小字典序的拓扑序,直接用小根堆就行(或者反着建图用大根堆) #include<iostream> #include<cstdio> #include< ...

  10. 两年Java程序员面试经验分享,从简历制作到面试总结!

    前言 工作两年左右,实习一年左右,正式工作一年左右,其实挺尴尬的,高不成低不就.因此在面试许多公司,找到了目前最适合自己的公司之后.于是做一个关于面试的总结.希望能够给那些依旧在找工作的同学提供帮助. ...