自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(76)
  • 资源 (2)
  • 收藏
  • 关注

原创 带你学习现代C++并发编程

通过对C++并发编程的理解,我总结了相关的文档,有需要的可以关注我公众号,并给我留言!

2024-03-30 20:43:04 231

原创 欢迎关注我的公众号

后续我会在公众号更新相关的C++/rust等相关语言知识,此外计算机基础相关的知识。

2024-01-13 16:04:19 401

原创 C++多线程--线程安全的队列实现(基于锁)

本文参考C++ Concurrency in Action (豆瓣)讲解并给出了完整的基于锁的线程安全的队列。下一篇讲解基于锁的哈希表。

2023-04-11 19:43:16 995

原创 C++多线程--线程安全的单例模式

由于最近事情比较多,所以很久没有更新相应的专栏了。目前事情基本告一段落,重新恢复相应专栏的更新。本文主要讲解在C++并发编程中如何实现线程安全的单例模式。本文主要由如下几部分构成臭名昭著的double-check单例实现四种线程安全的单例模式单例模式使用中所带来的一些坑

2023-03-05 22:01:35 1161 1

原创 C++11多线程--并行前缀和

很久没有写文章了,在新的一年,希望这篇文章能帮助大家进一步理解并行前缀和。如果你此刻已经读过第2版的第8章,那么你会遇到作者关于实现并行版本的代码。并行中计算前缀和也即并行前缀和。本文主要讲解。

2022-12-23 21:27:51 689

原创 C++11多线程--线程间共享数据(存在的问题)

本文简单的总结了C++ Concurrency in Action (豆瓣)中第三章中3.1节相关的内容,并给出相应的解释。

2022-10-23 17:38:49 595

原创 C++多线程--std::thread

在C++多线程专栏中,我讲解了std::async,std::future,std::promise以及内存序相关概念,基本上涵盖了C++事件处理相关的基本构建块。为了保证对C++多线程中相关线程概念的全部介绍,后期会增加相应的std::thread, std::mutex, std::lock_guard, std::unique_lock等相关介绍。而本文便是第一部分,std::thread的相关介绍和使用讲解。一个std::thread代表一个可执行单元。简单来说下面是四种创建线程的方式若你构建

2022-08-14 17:10:37 1080 1

原创 C++多线程--std::async

stdasync的行为类似一个异步函数调用。stdasync是一个可变函数模版,其可以接受一个可调用对象和相应的函数参数。stdasync返回值为一个stdfuture,通过该future的get接口可以获得可调用对象的返回值。关于stdasync的声明,可参考如下stdtype(type...)>type>此处需要对stdasync进行一定的使用说明stdasync应该是C++多线程编程中首先所考虑使用的。std通过本文可以了解stdstd。...

2022-07-16 16:59:02 829

原创 C++多线程--std::packaged_task

本篇文章介绍 用于实现现代C++多线程中Task的另一个工具模版类:std::packaged_task.关于C++多线程实现Task的工具模版类,前面已经介绍了std::promise 和 std::future, 具体可参考C++多线程 task--std::promise和std::future_qls315的博客-CSDN博客std::packaged_task是一个模版类,其主要有如下几个功能std::packaged_task的函数声明如下所示由上述模版声明可知,std::packaged

2022-07-09 15:14:05 560

原创 C++多线程std::condition_variable(条件变量)

在上篇文章C++多线程 task--std::promise和std::future_qls315的博客-CSDN博客介绍了std::promise和std::future,其可以模拟一次性事件通知机制(这也是条件变量的功能之一)为了补充相应的事件通知机制相应的方式,本文继续介绍std::condition_variable(条件变量).条件变量是一种C++标准提供的同步原语,其可以用来阻塞一个或者多个线程,直到某个线程修改了共享变量(condition),并且向条件变量发送通知。执行修改共享变量的线程,必

2022-07-03 17:02:19 530

原创 C++多线程 task--std::promise和std::future

本文主要讲解C++11/14/17中所提供的应用于多线程编程中的Task机制。Task可由如下几部分取得而本文主要讲解std::promise和std::future相关的内容。std::promise和std::future通过一个数据管道进行交流,可以将std::promise看作生产者,std::future看作消费者,其两者形成如下的方式交互std::promise本身是一个模版类,通过std::promise可以像数据管道中设置value,异常和相应的通知信息。std::promise提供了如下接

2022-06-26 15:59:09 1295

原创 Linux权限模型详解

本文主要总结linux权限模型相关的原理,譬如等各种问题。文件,pipe,内存等这些对象都是以某种方式共享的,因此它们需要某种保护机制来保护它们不被滥用;这种机制称为Unix权限模型。譬如,你有一个文件myfile,你不想让别人去写该文件,那么你便可以通过unix权限模型对文件进行相应的权限设置。unix权限模型将资源的权限分为三组:U(所有者, Owner), G(用户组, Group), O(其他, Other),而每组又由三个权限位构成,分别为r(读权限), w(写权限), x(可执行权限).譬如,在

2022-06-19 18:39:05 571

原创 Kafka 消息分发时间配置参数(Message Delivery Time)

本文是对Kafka Message Delivery Time的一个学习记录,方便后续回顾。假设producer通过如下方式异步调用send接口那么调用send接口成功或者失败需要等待的时间由下图所示具体的send()接口所经历的时间流如下图所示上述阶段各个参数说明如下max.block.ms:该参数控制生产者在调用 send() 以及通过 partitionsFor() 显式请求元数据时将阻塞多长时间。 当生产者的发送缓冲区已满或元数据不可用时,这些方法会阻塞。当达到 max.block.ms 时,

2022-06-08 20:04:23 1711

原创 Linux mmap讲解

Linux 提供了非常强大的 mmap(2) 系统调用; 它使开发人员能够将任何内容直接映射到进程虚拟地址空间 (VAS)。 此内容包括文件数据、硬件设备(适配器)内存区域,或只是通用内存区域。 在本文中,我们将只关注使用 mmap(2) 将常规文件的内容映射到进程 VAS 中。mmap(2)系统调用接口如下如果将文件的给定区域,从给定的偏移量offset和长度length字节映射到我们的进程虚拟地址空间 VAS; 下图描绘了想要实现的目标的简单视图:为了实现这个文件映射到进程的VAS,可使用 mma

2022-06-06 15:42:38 500 1

原创 C++11多线程内存序--X86-TSO内存模型

针对C++11多线程内存序相关的理解,我写过如下文章C++11多线程 内存序(std::memory_order_seq_cst )_qls315的博客-CSDN博客_memory_order_seq_cstC++11多线程 release sequence_qls315的博客-CSDN博客C++11多线程 内存序(std::memory_order_consume)_qls315的博客-CSDN博客_memory_order_consumeC++11多线程 内存序(std::memory_order_ac

2022-06-04 17:10:38 629

原创 深入理解Modern C++智能指针std::shared_ptr

现代C++为了解决内存泄露以及资源回收等问题,引入了智能指针的概念。在日常的C++实践中也是高频使用。本文是在实践过程中,对现代C++中的智能指针进行的一个稍微全面的总结。本文主要讲解std::shared_ptr的相关内容。std::shared_ptr也即智能指针,采用RAII手法,是一个模版对象。std::shared_ptr表示某一个资源的共享所有权。可以通过如下两种方式创建std::shared_ptr对象2 实现原理此处以如下代码为例,讲解std::shared_ptr的实现原理

2022-06-02 17:22:08 2101 2

原创 C++11多线程 内存屏障(fence/atomic_thread_fence)

0 引言在前述文章中,我有针对C++11种的六种内存序(memory order)进行相应的讲解,其文章如下C++11多线程 内存序(std::memory_order_seq_cst )C++11多线程 内存序(std::memory_order_consume)C++11多线程 内存序(std::memory_order_acquire/release)C++11多线程 内存序(std::memory_order_relaxed)如果不补充C++11种关于fence的讲解,那么内

2022-05-29 17:15:13 3243 4

原创 深入理解C++对象模型--虚拟继承(1)

0 引言最近在工作之余,重新拾起了深度探索C++对象模型这本书,想要进一步复习理解 C++对象模型相关的原理。以往看这本书,仅仅是浮于表面,并没有动手去实现和验证书中所说的内容。因此这次,便想既然再度学习,那么就深入去看一看目前流行的编译器对C++对象模型 是如何实现的。故有了本专题。目前使用较广泛的编译器有gcc,clang, msvc,但作为C++后台开发相信使用gcc,clang较多,而我也是使用两者较多,因此本专题中以gcc编译器为主,主要深入研究其对C++对象模型的实现。如果你..

2022-05-26 19:40:23 747 2

原创 Linux内核构建和安装

引言一直想了解和操作一波Linux内核构建和安装等相关知识,奈何在网上没有找到相应的好的讲解文档。因此自己去搜索了相应的书籍。强烈推荐如下这本书Linux Kernel Programming: A comprehensive guide to kernel internals, writing kernel modules, and kernel synchronization这本书详细讲解了内核的构建和安装,不过讲解的是5.4版本的内核。本文基于该书,总结一下 linux-5.15内核的构建

2021-11-12 16:27:40 3136 1

原创 C++11多线程 release sequence

引言C++11多线程系列主要介绍和讲解现代C++中多线程中内存模型/内存序等相关的知识,后期可能扩展为C++多线程中各个组件相关的内容。本

2021-11-05 14:03:33 661

原创 C++11/14 lambda表达式使用及解析(二)

引言很久之前总结过一篇C++11/14 lambda表达式使用及解析,其大体介绍了C++11/14中lambda表达式的基本使用,关于其他高级特性/使用等均未涉及;因此本文继该文章,进一步总结lambda表达时的高级特性(包括基本属性,细节)和使用。由于目前C++20已经发布,因此,计划总结成如下系列:C++11/14 lambda表达式使用及解析(二)主要总结C++11中的lambda特性及使用。C++11/14 lambda表达式使用及解析(三)主要总结C++14中的lambda特性及使

2021-10-22 17:55:14 1142

原创 template系列--decltype与std::declval

引言最近在重新复读《C++ template》相关知识,因此预计总结相关知识汇成template系列。目前碰到decltype与std::declval相关知识,为了搞懂decltype和std::declval的搭配使用原理,我参考了如下链接,decltype specifierWhy does std::declval add a reference?What are unevaluated operands in C++?C++ Templates(第2版 英文版)最终总结

2021-10-14 11:46:12 391

原创 C++11多线程 内存序(std::memory_order_consume)

引言在C++多线程 内存序系列文章中,已经介绍了如下三种内存序C++11多线程 内存序(std::memory_order_seq_cst )C++11多线程 内存序(std::memory_order_acquire/release)C++11多线程 内存序(std::memory_order_relaxed)为了保持该系列文章的完整性,因此增加std::memory_order_consume的介绍。std::memory_order_consume仅仅只用来补充该系列的完整性,

2021-10-12 13:55:44 1021

原创 C++11多线程 内存序(std::memory_order_acquire/release)

引言acquire/release定义代码示例总结

2021-09-23 11:26:05 2678 2

原创 C++11多线程 内存序(std::memory_order_relaxed)

1

2021-08-26 16:45:19 11091 2

原创 template系列--C++中.template含义

背景template关键字主要用在模版声明和定义时,但是关于.template相关的使用和说明,由于平时使用很少所以也很少见到,本文主要讲解一下.template的含义和使用。例子注:本例子仅仅是为了说明.template的含义,关于C++的相应写法很随意,不具有借鉴意义定义的模版如下:template <typename T>class Test {private: T value_{};public: Test(T val) : value_{val} {}

2021-03-09 15:00:15 2785

原创 C++11/14 lambda表达式使用及解析

0. 引言最近和同事讨论了一下C++中lambda函数的使用,因此想着周末总结一下lambda相关知识。1. lambda的定义(lambda是什么?)1.1 lambda表达式的定义lambda函数的背景可以看看相关链接https://www.zhihu.com/question/24962794可能非官方。下面看一下C++ Primer 给出的lambda表达式的定义一个lambda表达式表示一个可调用的代码单元。一个表达式具有如下形式[捕获列表] (参数列表)-&gt..

2020-07-12 17:53:30 2409

原创 std::move()的学习总结

目录1. 移动语义2. std::move的实现及使用3. 总结1. 移动语义移动语义可以使得编译器使用不那么昂贵的移动操作,来替换昂过的复制操作。同拷贝构造函数、拷贝赋值运算符赋予人们复制意义的能力一样,移动构造函数、移动赋值运算符也赋予人们移动语义的能力。更通俗的说:移动语义是通过移动构造函数或者移动赋值运算符实现的举个例子,对于C++标准库提供的std::shared_ptr智能指针,当对其进行复制操作时,需要增加其引用计数,而引用计数是个原子类型,因此增加引用计数是个耗时操作

2020-06-20 10:53:03 3714

原创 C++成员函数修饰词的意义和使用(&, &&, const, override)

1. 引言今天逛知乎,发现有人问在C++成员函数后加& 有什么作用?因此就想着回答一下,就顺带研究了一下C++相关的几个成员函数修饰词,并总结了一下相关的用法和意义2. C++成员函数修饰词C++11中的成员函数修饰词主要有&、&&、const;在这里我把override也看作成员函数修饰词,这个是因为override也可以向&、&&、const用在成员函数后, 但override的作用范围有限,只能用于虚函数且虚函数需要改写的时候。下面从

2020-06-19 09:50:45 4033

原创 C++11多线程 内存序(std::memory_order_seq_cst )

C++11多线程内存序内存模型为什么要有内存模型C++11的内存模型种类各个内存模型介绍及代码测试memory_order_seq_cst 顺序一致性模型内存模型内存模型介绍为什么要有内存模型多线程环境下,如果保持顺序一致性会降低CPU性能,代价很大,不利于程序优化。如果想要进行程序的优化,需要编译器和CPU之间遵守相同的约定,这个约定便是内存模型C++11的内存模型种类C++11提...

2020-04-02 16:55:56 4243

原创 网络编程(1)--socket/bind/listen/accept的简单介绍

网络编程1--socket/bind/listen/accept的简单介绍背景介绍网络编程接口socketbindlistenaccept背景介绍最近在学习APUE和Linux高性能服务编程,记录下自己的学习感悟网络编程接口个人理解, 网络编程接口的关键在于对文件的操作; 在Linux中,网络抽象套接字抽象成文件,网络间通信可以看作两台或者多台主机间 文件的交互。socket#incl...

2020-03-18 19:22:00 1727 2

原创 APUE-第4章总结

文章目录文件与目录

2019-11-29 14:58:25 183

原创 APUE-第3章总结

文件I/O(系统调用接口)文件描述符概念文件描述符是一个非负整数,对于内核而言所有打开的文件都通过文件描述符引用。数据结构

2019-11-21 10:12:32 122

原创 Linux源代码情景分析之内存管理 总结(1)--地址映射

映射两个非空集合A与B间存在着对应关系f,而且对于A中的每一个元素x,B中总有有唯一的一个元素y与它对应,就这种对应为从A到B的映射,记作f:A→B。其中,b称为元素a在映射f下的象,记作:b=f(a)。a称为b关于映射f的原象。集合A中所有元素的象的集合称为映射f的值域,记作f(A).地址映射32位CPU的线性地址集合A与计算机实际物理内存地址集合B存在着某种对应关系P,对于集合A中的每一...

2019-05-03 16:09:14 269

原创 APUE学习总结

APUE学习总结apue.h头文件的使用apue.h头文件的使用dirent.h使用详解Linux常用操作指令Linux下如何编译并运行c程序Linux makefile教程Linux 删除文件夹和文件的命令vim简单使用教程TOC欢迎使用Markdown编辑器你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔......

2019-04-12 14:31:49 1634

原创 十大排序算法详细集合

排序算法大集合源代码如下类的定义 #pragma once#include&lt;iostream&gt;#include&lt;vector&gt;#include&lt;algorithm&gt;using namespace std;class Sort { public: /* *选择排序:首先找到数组中最小的数,其次,将他和......

2018-08-01 15:56:23 436

原创 matlab中文件函数使用总结

获取某一路径下的文件% uigetfile命令的应用% 此函数的用法为% [FileName,PathName,FilterIndex] =uigetfile(FilterSpec,DialogTitle,DefaultName)% FileName:返回的文件名% PathName:返回的文件的路径名% FilterIndex:选择的文件类型% FilterSpec

2017-10-26 15:07:08 3092

原创 C++多线程-signal handler使用

C++多线程--signal handler使用

2024-01-19 21:22:52 457

原创 C++多线程--线程安全的哈希表(基于锁)

此篇为本专栏的第一篇文章。本专栏主要讲解C++并发编程相关的实践。包括但不限于首先,我们从基于锁的数据结构讲起。前段时间,我某个同事面试字节某业务时,面试官让其实现一个线程安全的哈希表。本文便以此开始,分几篇来讲解基于锁的线程安全的一些数据结构。

2023-08-12 13:21:21 588

原创 C++多线程--C++异常处理(1)

异常(exception)是现代C++中的一个特性,使用该特性可以将程序的异常处理和正常程序接耦。一个异常(exception)是一个错误事件,对程序运行时出现的异常情况的响应,例如尝试除以零。异常提供了一种将控制从程序的一个部分转移到另一个部分的方法。C++ exception可由throw表达式,typeid,new表达式,allocation函数,以及任何被指定为抛出异常以指示某些错误情况的标准库函数(例如 std::vector::at、std::string::substr 等)抛出。

2023-04-18 13:40:30 426 1

CS和ICA的图像目标识别

本文研究一种新型的 X 射线成像方法,利用独立成分分析从多能 X 射线医学图像中将重 叠目标分离成像,并结合压缩感知以提高算法运行速度和分离成像质量。具体研究方法为: 根据被拍摄物体的物质组成,拍摄至少三幅多能 X 射线图像组成图像序列;应用 CS 选取稀 疏基将多能 X 射线医学图像进行稀疏表示;然后利用 ICA 将多能 X 射线图像的稀疏表示进 行盲源分离得到独立源;最后采用正交匹配追踪算法( Orthogonal Matching Pursuit,OMP )将 独立源重构达到分离成像。

2017-11-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除