第1节
前言
(1)总述以及基础要求、开发环境
(2)简要自我介绍和讲课特点
(3)出这门课程的主要目的
(4)在vs2017中创建一个工程方便后续的课程讲解
章节2
正式开讲
第1节
并发基本概念及实现,进程、线程基本概念
(1)并发、进程、线程的基本概念和综述
(1.1)并发
(1.2)可执行程序
(1.3)进程
(1.4)线程
(1.5)学习心得
(2)并发的实现方法
(2.1)多进程并发
(2.2)多线程并发
(2.3)总结
(3)C++11新标准线程库
第2节
线程启动、结束,创建线程多法、join,detach
(1)范例演示线程运行的开始和结束
(1.1)thread
(1.2)join()
(1.3)detach()
(1.4)joinable()
(2)其他创建线程的手法
(2.1)用类,以及一个问题范例
(2.2)用lambda表达式
第3节
线程传参详解,detach()大坑,成员函数做线程函数
(1)传递临时对象作为线程参数
(1.1)要避免的陷阱 (解释1)
(1.2)要避免的陷阱 (解释2)
(1.3)总结
(2)临时对象作为线程参数继续讲
(2.1)线程id概念
(2.2)临时对象构造时机抓捕
(3)传递类对象、智能指针作为线程参数
(4)用成员函数指针做线程函数
第4节
创建多个线程、数据共享问题分析、案例代码
(1)创建和等待多个线程
(2)数据共享问题分析
(2.1)只读的数据
(2.2)有读有写
(2.3)其他案例
(3)共享数据的保护案例代码
第5节
互斥量概念、用法、死锁演示及解决详解
(1)互斥量(mutex)的基本概念
(2)互斥量的用法
(2.1)lock(),unlock()
(2.2)std::lock_guard类模板
(3)死锁
(3.1)死锁演示
(3.2)死锁的一般解决方案
(3.3)std::lock()函数模板
(3.4)std::lock_guard的std::adopt_lock参数
第6节
unique_lock详解
(1)unique_lock取代lock_guard
(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所有权的传递
第7节
单例设计模式共享数据分析、解决,call_once
(1)设计模式大概谈
(2)单例设计模式
(3)单例设计模式共享数据问题分析、解决
(4)std::call_once()
第8节
condition_variable、wait、notify_one、notify_all
(1)条件变量std::condition_variable、wait()、notify_one()
(2)上述代码深入思考
(3)notify_all()
第9节
async、future、packaged_task、promise
(1)std::async、std::future创建后台任务并返回值
(2)std:: packaged_task
(3)std:: promise
(4)小结
第10节
future其他成员函数、shared_future、atomic
(1)std::future的其他成员函数
(2)std::shared_future
(3)原子操作std::atomic
(3.1)原子操作概念引出范例
(3.2)基本的std:: atomic用法范例
(3.3)老师的心得
第11节
std::atomic续谈、std::async深入谈
(1)原子操作std::atomic续谈
(2)std::async深入谈
(2.1)std::async参数详述
(2.2)std::async和std::thread的区别
(2.3)std::async不确定性问题的解决
第12节
windows临界区、其他各种mutex互斥量
(1)windows临界区
(2)多次进入临界区试验
(3)自动析构技术
(4)recursive_mutex递归的独占互斥量
(5)带超时的互斥量std::timed_mutex和std::recursive_timed_mutex
第13节
补充知识、线程池浅谈、数量谈、总结
(1)补充一些知识点
(1.1)虚假唤醒
(1.2)atomic
(2)浅谈线程池
(2.1)场景设想
(2.2)实现方式
(3)线程创建数量谈
(4)c++11多线程总结 |