C++多线程
文章平均质量分 86
Jack丶Wang
这个作者很懒,什么都没留下…
展开
-
C++11并发与多线程笔记(13)补充知识、线程池浅谈、数量谈、总结
文章目录1、补充知识1.1 虚假唤醒1.2 atomic2、浅谈线程池2.1 场景设想2.2 线程池2.3 实现方式3、谈线程池创建线程数量3.1 线程开的数量极限问题3.2 线程创建数量建议1、补充知识1.1 虚假唤醒notify_one或者notify_all唤醒wait()后,实际有些线程可能不满足唤醒的条件,就会造成虚假唤醒,可以在wait中再次进行判断解决虚假唤醒。解决:wait中要有第二个参数(lambda),并且这个lambda中要正确判断所处理的公共数据是否存在。1.2 ato原创 2021-11-06 11:04:20 · 225 阅读 · 0 评论 -
C++11并发与多线程笔记(12)windows临界区、其他各种mutex互斥量
文章目录1、Windows临界区1.1 创建Windows临界区1.2 临界区初始化1.3 进入临界区1.4 离开临界区1.5 示例代码2、多次进入临界区试验3、自动析构技术4、recursive_mutex5、带超时的互斥量std::timed_mutex和std::recursive_timed_mutex5.1 std::timed_mutex5.2 std::recursive_timed_mutex1、Windows临界区1.1 创建Windows临界区CRITICAL_SECTION 临原创 2021-11-06 11:03:46 · 590 阅读 · 0 评论 -
C++11并发与多线程笔记(11)atomic续谈、async深入谈
文章目录1、原子操作std::atomic续谈2、std::async深入谈2.1 std::async用来创建一个异步任务2.2 std::async和std::thread的区别2.3 std::async不确定性问题的解决1、原子操作std::atomic续谈一般atomic原子操作,针对++,--,+=,&=,|=,^=是支持的,其他的可能不支持。示例代码:#include <iostream>#include <thread>#include &原创 2021-11-06 11:03:07 · 257 阅读 · 0 评论 -
C++11并发与多线程笔记(10)future其他成员函数、shared_future、atomic
文章目录1、std::future的其他成员函数1.1 std::future_status1.2 wait_for()1.3 示例代码2、std::shared_future2.1 get_future()2.2 share()2.3 valid()2.4 示例代码:3、原子操作std::atomic3.1 原子操作概念引出范例3.2 基本的std::atomic用法范例1、std::future的其他成员函数1.1 std::future_status枚举类,用来表示future的返回状态/原创 2021-11-06 11:02:34 · 376 阅读 · 0 评论 -
C++11并发与多线程笔记(9)async、future、packaged_task、promise
文章目录1、std::async、std::future创建后台任务并返回值1.1 std::async1.2 std::future1.3 std::future::get()1.4 std::future::wait()1.5 使用普通函数创建异步任务1.6 使用类成员函数创建异步任务1.7 std::lanuch1.7.1 std::lanuch::deferred1.7.2 std::lanuch::async2、std::packaged_task3、std::promise4、小结1、std:原创 2021-11-06 11:01:53 · 620 阅读 · 0 评论 -
C++11并发与多线程笔记(8)condition_variable、wait、notify_one、notify_all
文章目录1、条件变量std::condition_variable、wait()、notify_one()1.1 前提1.2 std::condition_variable1.3 wait()1.4 notify_one()1.5 示例代码(不完美):2、notify_all()1、条件变量std::condition_variable、wait()、notify_one()1.1 前提线程A:等待一个条件满足线程B:专门往消息队列中扔消息(数据)1.2 std::condition_vari原创 2021-11-06 11:00:42 · 824 阅读 · 0 评论 -
C++11并发与多线程笔记(7)单例设计模式共享数据分析、解决,call_once
文章目录1、设计模式大概谈2、单例设计模式3、单例设计模式共享数据问题分析、解决4、std::call_once()1、设计模式大概谈设计模式代码的一些写法(这些写法跟常规写法不怎么一样),这样代码写出来的程序灵活,维护起来可能方便,但是别人接管,阅读代码非常痛苦。用“设计模式”理念写出来的代码是很晦涩的;当应付特别大的项目的时候,把项目的开发经验、模块划分经验,总结整理成设计模式(先有开发需求,后有理论总结和整理)。设计模式肯定有它独特的优点,要活学活用,不要深陷其中,生搬硬套。2、原创 2021-11-06 10:59:43 · 194 阅读 · 0 评论 -
C++11并发与多线程笔记(6)unique_lock详解
文章目录1、unique_lock取代lock_guard2、unique_lock第二个参数2.1 std::adopt_lock2.2 std::try_to_lock2.3 std::defer_lock3、unique_lock的成员函数3.1 lock(),unlock()3.2 try_lock())3.3 release()4、unique_lock所有权的传递4.1 std::move4.2 return std::unique_lock1、unique_lock取代lock_guard原创 2021-11-06 10:58:33 · 495 阅读 · 0 评论 -
C++11并发与多线程笔记(5)互斥量概念、用法、死锁演示及解决详解
文章目录1、互斥量的基本概念2、互斥量的用法2.1 lock(),unlock()2.2 std::lock_guard3、死锁3.1 死锁演示3.2 死锁的一般解决方案3.3 std::lock()函数模板3.4 std::lock_guard的std::adopt_lock参数3.5 总结1、互斥量的基本概念 当对共享数据进行操作时,为了防止线程冲突,我们应该使某个线程用代码把共享数据锁住,然后操作数据,最后解锁;其他线程想操作共享数据的线程必须等待解锁,锁定住,操作,解锁。这就引出了一个名词概原创 2021-11-01 21:59:38 · 274 阅读 · 1 评论 -
C++11并发与多线程笔记(4)创建多个线程、数据共享问题解析、案例代码
文章目录1、创建和等待多个线程1.1 范例1.2 总结2、数据共享问题分析2.1 只读的数据2.2 有读有写的数据2.3 其他案例3、共享数据的保护案例代码1、创建和等待多个线程1.1 范例#include <iostream>#include <thread>#include <vector>using namespace std;void myprint(int inum){ cout << "myprint线程开始执行了,线程编号="原创 2021-11-01 21:51:57 · 382 阅读 · 0 评论 -
C++11并发与多线程笔记(3)线程传参详解,detach()大坑,成员函数做线程函数
文章目录1、传递临时参数作为线程参数1.1、要避免的陷阱(解释1)1.2、要避免的陷阱(解释2)1.3、总结2、临时对象作为线程参数的测试方法2.1 线程id2.2 临时对象构造时机抓捕3、传递类对象、智能指针作为线程参数3.1 传递类对象3.2 std:ref()3.3 传递智能指针3.4 用成员函数指针做线程函数3.5 对传递类对象进行改造3.6 总结1、传递临时参数作为线程参数1.1、要避免的陷阱(解释1)示例代码:#include <iostream>#include <原创 2021-10-30 16:58:48 · 465 阅读 · 0 评论 -
C++11并发与多线程笔记(2)线程启动、结束,创建线程多法、join,detach
文章目录1、线程创建方法及案例1.1 范例1.2 thread1.3 join()1.4 detach()1.5 joinable()2、其他创建线程的手法2.1 、用类对象2.2、 用lambda表达式1、线程创建方法及案例程序运行起来,生成一个进程,该进程所属的主线程开始自动运行;当主线程从main()函数返回,则整个进程执行完毕。主线程从main()开始执行,那么我们自己创建的线程,也需要从一个函数开始运行(初始函数),一旦这个函数运行完毕,线程也结束运行。整个进程是否执行完毕的标志是:主线原创 2021-10-30 16:57:31 · 246 阅读 · 0 评论 -
C++11并发与多线程笔记(1)并发基本概念及实现,进程、线程基本概念
文章目录1、并发、进程、线程的基本概念和综述1.1 并发1.2 可执行程序1.3 进程1.4 线程1.5 总结1.6 学习心得2、并发的实现方法2.1 多进程并发2.2 多线程并发2.3 总结3、C++11新标准线程库3.1 以往3.2 C++11以后3.2 C++11以后1、并发、进程、线程的基本概念和综述1.1 并发两个或者更多的任务(独立的活动)同时发生(进行):一个程序同时执行多个独立的任务;以往计算机,单核CPU(中央处理器):某一个时刻只能执行一个任务,由操作系统调度,每秒钟进行多次所原创 2021-10-30 16:55:13 · 175 阅读 · 0 评论