
C++
文章平均质量分 94
冷瑾瑜
日出日落,求索不止
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++并发编程 -8. 高级线程管理
轮询式中断通过短周期等待+标志检查实现线程中断,其核心特点是:使用替代无限等待,每毫秒唤醒检查中断标志设置三重检查点(等待前/设置后/唤醒后)确保及时响应依赖执行原子标志检查,触发时抛出中断异常通过RAII模式()保证资源安全释放优势在于实现简单、跨平台兼容性好;局限是响应延迟取决于等待周期(典型1ms)。适用于后台处理等非实时场景,在CPU开销(短等待)和响应速度间取得平衡。技术本质是用时间片轮询换取实现复杂度降低,是轻量级中断的经典解决方案。原创 2025-07-01 16:41:34 · 661 阅读 · 0 评论 -
C++并发编程 -7. 并发代码设计
由于counter是全局变量,当多个线程同时调用processing_loop去修改同一个变量,这就要求counter在缓存内做一份拷贝,再改变自己的值,或其他线程以发布的方式对缓存中的拷贝副本进行更新。虽然为每个线程分配不同的数据块,但工作的划分(无论是之前就划分好,还是使用递归的方式划分)仍然在理论阶段,因为这里每个线程对每个数据块的操作是相同的。根据线程的操作性质,以及使用到的内存序,这样的修改可能会让第二个处理器停下来,等待硬件内存更新缓存中的数据。这样,每个线程访问的数据项就不会互相干扰。原创 2025-03-26 17:39:00 · 708 阅读 · 0 评论 -
C++并发编程 -6. 无锁并发数据结构设计
风险指针”是指Maged Michael发明的一种技法, 后来被IBM申请为专利。简言之可以将要删除的节点进行特殊处理,如果有线程正在使用我们将这个节点的指针标记为风险指针,其他线程不可删除。我们实现hazard_pointer类,管理风险指针和线程id。id为正在使用该风险指针的id,pointer为指针类型,存储的节点数据地址。当一个线程从风险数组中查找某个闲置节点作为风险节点,则需要将pointer指向节点的数据,并且将id设置为当前的线程id。定义一个全局的风险节点数组,用来存储风险节点。原创 2025-03-10 17:45:35 · 945 阅读 · 1 评论 -
C++并发编程 -5. 基于锁实现线程安全的队列和栈容器
如何通过互斥锁和条件变量构建线程安全的队列(栈)在已经介绍过构建线程安全的栈,现在重新回顾。原创 2024-03-07 16:17:57 · 1458 阅读 · 0 评论 -
C++并发编程 -4.原子操作和内存模型
原子操作是一类不可分割的操作,当这样操作在任意线程中进行一半的时候,你是不能查看的;它的状态要不就是完成,要不就是未完成。如果从对象中读取一个值的操作是原子的,并且对对象的所有修改也都是原子的话,那么加载操作要不就会检索对象初始化的值,要不就将值存在某一次修改中。说白了原子操作就是不可中断的操作,要么被执行要不不被执行。原创 2024-03-01 15:16:47 · 2926 阅读 · 0 评论 -
C++并发编程 -3.同步并发操作
本文介绍如何使用条件变量控制并发的同步操作、C++ 并发三剑客,函数式编程。原创 2024-02-17 10:13:25 · 1476 阅读 · 0 评论 -
C++并发编程 -2.线程间共享数据
本章就以在C++中进行安全的数据共享为主题。避免上述及其他潜在问题的发生的同时,将共享数据的优势发挥到最大。原创 2024-02-02 10:49:01 · 1756 阅读 · 0 评论 -
C++并发编程 -1.线程管理
本栏主要介绍《C++并发实战编程》这本书,。将按照书目录分为 九章节介绍C++并发编程,尽可能简化本书内晦涩难懂知识点。本章节主要讲解线程使用基础。详细介绍线程使用基础(线程发起、等待、参数、异常处理)、线程管控(归属权、并发数量等)。原创 2024-01-23 16:14:52 · 1081 阅读 · 0 评论 -
泛型编程-常用模板
例举C++11 常用模板。原创 2024-01-09 17:53:25 · 1215 阅读 · 0 评论 -
C++11常用关键字
auto早在C++98标准引入,在98标准含义为:声明变量拥有自动周期,但是这本身就是多余在C++11中auto全新定义:变量的自动类型推断const是c++本来就有的关键字,用来表示只读状态,但是通过一些手段还是可以进行修改,比如使用const_cast或者使用指针强项篡改。而constexpr才是真正意义上的常量,constexpr修饰的变量必须是在编译期间就可以确定的值,如果无法再编译期间确定,那么就会报错。原创 2023-12-31 17:24:04 · 1395 阅读 · 0 评论 -
C++ lambda表达式
Lambda表达式是C++11标准引入的一种特性,它提供了一种方便的方式来定义匿名函数。Lambda表达式是一种能够捕捉外部变量并使用它们的函数对象。由捕获列表、参数列表、返回类型和函数体组成;其中,参数列表和返回类型可以忽略,但不可以忽略捕获列表和函数体。[捕获列表](参数列表) -> 返回类型 {函数体}例如:auto f = []{ return 1 + 2;或者 auto f = [](int x, int y)->int{ return x + y;(在后面章节会详细介绍使用规则.)原创 2023-09-05 16:49:50 · 7332 阅读 · 0 评论 -
C++引用与移动语义
按照这个定义来理解,“右值引用”就是对“右值”的引用了,而右值可能是常量,也可能是变量,那么右值引用自然也是分两种情况来不同处理。否则为什么不能这样呢?和const引用一样,常量没有地址,没有存储位置,只有值,因此,要把这个值保存下来的话,同样得按照“新定义变量”的形式,因此,当右值引用绑定常量时,相当于定义了一个普通变量。而根据规则,当用户没有定义拷贝构造的时候,C++会执行默认拷贝构造函数,进行浅拷贝(直接将原内容的地址交给要拷贝的类,两个类共同指向同一空间),这样执行上述代码,则会造成两次析构。原创 2023-09-04 17:11:27 · 594 阅读 · 0 评论 -
C++11 智能指针详解
C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己 管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的 概念,方便管理堆内存。C++里面的四个智能指针其中后三个是C++11支持,并且第一个已经被C++11弃用。一.shared_ptr共享被管理对象,同一时刻可以有多个shared_ptr拥有对象的所有权,当最后一个shared_ptr对象销毁时,被管理对象自动销毁。原创 2023-08-31 16:12:50 · 1834 阅读 · 2 评论 -
STL使用细节详解
STL使用过程中的疑难杂症,注意事项原创 2022-09-03 10:26:54 · 2118 阅读 · 1 评论 -
C++继承
一.继承概念继承就是在原有成员基础上添加特有的成员形成派生类1.继承的作用目的:代码重用提高执行效率关键词:基类(父类)、派生类(子类)意义:子类拥有父类的成员、子类拥有父类没有的特性、子类是一种特殊的父类(子类可以当做父类使用)2.继承注意点不能继承父类的构造析构和友元函数 子类拥有父类所有成员属性和行为 一个类可以有多个基类,也可以有多个派生类3.继承派生类成员包括两大部分:一是从基类继承下来的成员(与基类拥有共同的特性)、二是本身独有的特性格式:clas原创 2021-04-01 19:46:45 · 1029 阅读 · 0 评论 -
C++多态
一.多态1.概念多态:同一操作(函数)作用不同对象,产生了不同的执行结果。本质:基类指针或引用指向派生类对象,来调用派生类方法,运行派生类的函数注意:在继承的时候虚函数进行了重写。重写要求函数名、函数类型、函数返回值一致。2.多态原理当对象成员行为用virtual修饰的时候,这个行为就会在前面添加一个ptr指针(虚函数指针 4字节)。该指针指向一个虚函数表,虚函数表存储当前对象所有虚函数的地址。在继承的时候虚函数指针总是放在第一位。3.存储结构 ①虚函...原创 2021-04-01 08:44:19 · 215 阅读 · 0 评论 -
构造与析构
一.构造函数构造函数就是对类对象进行初始化赋值。构造函数由编译器自动调用,且整个过程只调用一次。1.构造函数性质没有返回值也不写void 可以有参数和函数重载。 构造函数函数名与类名一致。 构造函数由编译器自动调用,且整个过程只调用一次。语法格式:#include<iostream>using namespace std;class A{public: A() { cout<<"构造函数A()"<<endl; } A(in原创 2021-03-28 14:38:47 · 2547 阅读 · 0 评论 -
类与对象
一.面向对象概念C语言:面向过程:机器人行走:考虑 左脚还是右脚 提起多少度 落脚 再迈右脚C++语言:面向对象语言:行走;人可以作为一个对象,属性姓名、年龄、身高、体重…行为有走、跑、跳、吃饭、唱歌…..具有相同性质的对象,我们可以抽象称为类,人属于人类,车属于车类;面向对象:把数据及对数据的操作方法放在一起,作为一个相互依存的整体。1.面向过程及面向对象优缺点面向过程:面向过程分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现按部就班,主要考虑性能,资源使用。不容易原创 2021-03-25 19:32:00 · 244 阅读 · 0 评论 -
初识C++
一.什么是C++C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计(本质面向对象,可以按照面向过程的方法使用c++),还可以进行以封装、继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。二.五大区分析与作用域分析堆:就是那些由mall...原创 2021-03-24 16:22:15 · 328 阅读 · 1 评论