├─第1章C++11多线程快速入门(1小时26分钟8节)
│ 1-1课程介绍.mp4
│ 1-2为什么要使用多线程_第一个线程代码示例.mp4
│ 1-3thread对象生命周期和线程等待和分离.mp4
│ 1-4全局函数作为线程入口分析参数传递内存操作操作.mp4
│ 1-5线程函数传递指针和引用.mp4
│ 1-6使用成员函数作为线程入口并封装线程基类接口类接口.mp4
│ 1-7lambda临时函数作为线程入口.mp4
│ 1-8call_once多线程调用函数只进入一次.mp4
│
├─第2章多线程通信和锁(53分钟5节)
│ 2-1多线程的状态及其切换流程分析.mp4
│ 2-2竞争状态和临界区介绍_互斥锁mutex代码演示.mp4
│ 2-3互斥锁的坑_线程抢占不到资源原因和解决方法.mp4
│ 2-4超时锁timed_mutex和可重入锁recursirecursive_mutex.mp4
│ 2-5共享锁shared_mutex解决读写问题.mp4
│
├─第3章锁资源管理和条件变量(1小时51分钟9节)
│ 3-1手动实现RAII管理mutex资源_锁自动释放.mp4
│ 3-2c++11RAII控制锁lock_guardlock_guard.mp4
│ 3-3unique_lock可临时解锁控制超时的互斥体包装.mp4
│ 3-4C++14shared_lock共享锁包装器.mp4
│ 3-5c++17scoped_lock解决互锁造成的死锁问题.mp4
│ 3-6项目案例线程通信使用互斥锁和list实现线程通信.mp4
│ 3-7条件变量应用场景_生产者消费者信号处理步骤.mp4
│ 3-8condition_variable代码示例读写线程.mp4
│ 3-9条件变量应用线程通信解决线程退出时的阻塞问题.mp4
│
├─第4章多线程异步通信和并发计算(1小时38分钟7节)
│ 4-1promise和future多线程异步传值.mp4
│ 4-2packaged_task异步调用函数打包.mp4
│ 4-3async创建异步线程替代thread.mp4
│ 4-4c++多核计算分析并实现base16编码.mp4
│ 4-5c++11实现多核base16编码并与单核性能测试对.mp4
│ 4-6c++17for_each多核运算示例编码base1.mp4
│ 4-7线程池实现步骤说明.mp4
│
├─第5章C++111417线程池实现(1小时24分钟8节)
│ 5-1完成线程池的初始化和启动.mp4
│ 5-2完成线程池任务调度.mp4
│ 5-3完成线程池退出并等待任务处理结束利用lambada表.mp4
│ 5-4线程池中在在运行的任务数量获取使用atomic原子变.mp4
│ 5-5使用智能指针管理线程对象和任务对象的生命走起.mp4
│ 5-6异步获取线程池中任务执行结果.mp4
│ 5-7基于线程池实现音视频批量转码测试任务.mp4
│ 5-8完成线程池案例基于ffmpeg工具多线程转码视频.mp4
│
├─第6章C++20线程特性(13分钟2节)
│ 6-1c++20屏障barrier实现线程协调.mp4
│ 6-2课程总结.mp4
│
└─课件
10超时锁timed_mutex和可重入锁recursive_mutex.zip
11共享锁shared_mutex解决读写问题.zip
12手动实现RAII管理mutex资源_锁自动释放.zip
13c 11RAII控制锁lock_guard.zip
14unique_lock可临时解锁控制超时的互斥体包装器.zip
15C 14shared_lock共享锁包装器.zip
16c 17scoped_lock解决互锁造成的死锁问题.zip
17项目案例线程通信使用互斥锁和list实现线程通信.zip
19condition_variable代码示例读写线程同步.zip
1为什么要使用多线程_第一个线程代码示例.zip
20条件变量应用线程通信解决线程退出时的阻塞问题.zip
21promise和future多线程异步传值.zip
22packaged_task异步调用函数打包.zip
23async创建异步线程替代thread.zip
24c 多核计算分析并实现base16编码.zip
25c 11实现多核base16编码并与单核性能测试对比.zip
26c 17for_each多核运算示例编码base16并对比性能.zip
28完成线程池的初始化和启动.zip
29完成线程池任务调度.zip
2thread对象生命周期和线程等待和分离.zip
30完成线程池退出并等待任务处理结束利用lambada表达式.zip
31线程池中在在运行的任务数量获取使用atomic原子变量.zip
32使用智能指针管理线程对象和任务对象的生命走起.zip
33异步获取线程池中任务执行结果.zip
34基于线程池实现音视频批量转码测试任务.zip
35完成线程池案例基于ffmpeg工具多线程转码视频.zip
36c 20屏障barrier实现线程协调.zip
37call_once多线程调用函数只进入一次.zip
3全局函数作为线程入口分析参数传递内存操作.zip
4线程函数传递指针和引用.zip
5使用成员函数作为线程入口并封装线程基类接口.zip
6lambda临时函数作为线程入口.zip
8竞争状态和临界区介绍_互斥锁mutex代码演示.zip
9互斥锁的坑_线程抢占不到资源原因和解决方法.zip
C 11141720多线程从原理到线程池实战v0.4.PDF
有需要联系v;加客服窗口的联系方式
摘要:本文以C++多线程技术为核心,从原理出发,深入浅出地讲解了多线程的基本概念、实现方法以及线程池的实战应用。通过分析2021年3月的C++多线程技术,本文旨在帮助读者全面掌握C++多线程编程,提高编程效率。
1、多线程原理
多线程是现代操作系统和编程语言中常用的技术之一,它允许程序同时执行多个任务。在C++中,多线程的实现主要依赖于操作系统提供的线程库。多线程的基本原理包括线程的创建、调度、同步和通信等。
线程的创建是多线程编程的第一步,C++中可以使用std::thread类来创建线程。线程的调度由操作系统负责,它根据线程的优先级、状态等因素进行调度。线程的同步是保证多个线程正确执行的关键,C++提供了互斥锁、条件变量等同步机制。线程的通信则是线程之间交换信息的方式,C++提供了管道、共享内存等通信机制。
多线程编程需要注意线程安全问题,如数据竞争、死锁等。为了避免这些问题,可以使用互斥锁、原子操作等同步机制来保证线程安全。
2、多线程实现
C++中实现多线程主要有两种方式:使用std::thread类和继承std::thread类。使用std::thread类是最简单的方式,只需创建一个std::thread对象即可。继承std::thread类则可以自定义线程的行为,但需要更多的代码。
在多线程编程中,可以使用lambda表达式、函数对象等来简化线程的创建和执行。此外,C++11引入了线程局部存储(thread-local storage,TLS)的概念,可以用于存储线程特有的数据。
多线程编程还需要注意线程的异常处理,因为线程的异常可能会影响到其他线程的执行。C++11提供了线程局部存储(thread-local storage,TLS)的概念,可以用于存储线程特有的数据。
3、线程池实战
线程池是一种常用的多线程编程模式,它可以将多个任务分配给有限的线程执行,从而提高程序的执行效率。线程池的实现主要包括任务队列、线程管理、任务分配等。
在C++中,可以使用std::thread和std::queue等标准库来实现线程池。任务队列用于存储待执行的任务,线程管理负责创建和销毁线程,任务分配则将任务分配给线程执行。
线程池的实现需要注意线程安全和任务分配的效率。为了避免线程安全问题,可以使用互斥锁、条件变量等同步机制。为了提高任务分配的效率,可以使用任务队列的优先级策略,如FIFO、LIFO等。
4、C++多线程应用
C++多线程技术在各种应用场景中都有广泛的应用,如网络编程、图形渲染、科学计算等。以下是一些C++多线程应用实例:
网络编程:使用多线程实现并发服务器,提高服务器处理请求的能力。
图形渲染:使用多线程实现图形渲染,提高渲染效率。
科学计算:使用多线程实现并行计算,提高计算速度。
总结:
本文从多线程原理、实现方法、线程池实战以及应用等方面对C++多线程技术进行了详细阐述。通过学习本文,读者可以全面掌握C++多线程编程,提高编程效率。
本文由nayona.cn整理
联系我们
关注公众号
微信扫一扫
支付宝扫一扫