
高阶开发公共基础部分
文章平均质量分 74
charlie114514191
我是一个普通的嵌入式软件程序员,喜欢研究Linux(应用层跟内核从都有粗浅的涉略),单片机,操作系统和计算机体系架构等内容,目前是一枚普通的本科生。
笔者是一个朴素的开源主义者,我坚信代码和知识没有壁垒,也不应该有壁垒所在,任何人都应该平等的获取到所有的知识。笔者力所能及的将自己的代码项目开源到Github
笔者的github:https://github.com/Charliechen114514
笔者的私人博客(旧):https://charliechen114514.github.io/
笔者的私人博客(新):https://www.charliechen114514.tech/
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++异步编程小论
浅论:我看有人写的浅论异步编程的文章实际上在干的是介绍多线程,这里刚好最近对异步编程有所兴趣:我们来看看几个C++11新加进来的一些异步编程关键字。这里需要对线程编程有所概念了我们好方便阅读,所以简单的想看看本文请先对多线程有一个基本的了解。std::async和等。std::async。原创 2024-04-21 21:06:41 · 709 阅读 · 0 评论 -
高阶开发基础——快速入门C++并发编程6——大作业:实现一个超级迷你的线程池
线程池是一种并发编程的设计模式,用于管理和复用多个线程,以提高程序的性能和资源利用率。它的核心思想是预先创建一组线程,并将任务分配给这些线程执行,而不是为每个任务单独创建和销毁线程。换而言之,线程池说白了就是一种饿汉思维——直接预先提供若干的线程,由线程池内部控制调度,确保我们可以只关心任务的提交以及完成。下一步,就是构造我们的线程池的线程。注意的是——线程和任务是解耦合的,意味着我们需要一个中间函数解耦合任务派发。我们下面要做的是设计一个任务是不返回的线程池。是true,直接线程跳出来结束全文。原创 2025-02-03 18:31:50 · 696 阅读 · 0 评论 -
高阶开发基础——快速入门C++并发编程5 信号量的使用
对于生产者,则是每一次准备处理数据的时候,先向条件变量请示一下,我可不可以进行处理。条件变量依据我们的判断条件,当我们的输入不是队列空的时候,就不需要等待,直接处理队列内数据(wait的判断条件要求的是当为真的适合不去等待,假的时候(也就是资源此时不可以被请求,你要等待)的时候休眠,直到消费者线程提醒你你要起来处理数据)假设有两个线程,一个线程负责生产数据,另一个线程负责消费数据。生产线程需要等到消费线程处理完数据后才能继续生产,而消费线程需要等到有数据时才能开始消费。:消费线程发现没有数据时,会调用。原创 2025-02-03 17:31:33 · 876 阅读 · 0 评论 -
高阶开发基础——快速入门C++并发编程4
总而言之,单例模式就是保证在多线程中对象的唯一性。C++11预料了这样的场景,因为十分多见(比如说初始化日志和初始化单一数据库等等),虽然这个代码在单线程中显然可以正确的工作,但是遗憾的是,只要放到多线程中,我们的初始化就会出现问题,很有可能导致潜在的双重初始化!所以,call_once就被用来保证在多个线程中只执行一次的用法。现在,我们创建若干的线程并不会发生多重初始化的问题!原创 2025-02-03 16:10:37 · 773 阅读 · 0 评论 -
高阶开发基础——快速入门C++并发编程3
分析一下,thread1先启动了,快速的占用了mutex1,thread2随后占用了mutex1.麻烦来了,现在做好了一系列操作后,我们马上有需要获取第二个锁,对于thread1而言,他要拿到mutex2,就必须让thread2放掉他自己手中的mutex2,但是,thread2想要放掉自己的mutex2,就必须拿到thread1手中的mutex1...好!另一个办法是——优化自己的编程思路,看看是不是真的不得不用多重锁,如果优化到后面,发现可以使用其他方案解决,那就更好了。因为锁了锁的人是过去的他自己!原创 2025-02-03 15:41:31 · 1022 阅读 · 0 评论 -
高阶开发基础——快速入门C++并发编程2
所以,可能我们的两个线程从内存中加载了同样的数,自增放回去了也就会是相同的数,两个线程实际上只加了一次。答案是,worker是一个同步函数,我们的value的作用域隶属于worker函数的范围内,现在,worker一旦将th线程派发出去,里面的工作函数的引用ref就会非法。这个this_thread表达的是当前的运行线程的线程句柄,也就是说,调用这个函数表达了运行这个函数的当前线程实体休眠若干秒。关于C++的时间库,C++的时间库抽象了几个经典的必要的时间操作,因此,使用这个库来表达我们的时间非常的方便。原创 2025-02-03 15:16:39 · 1120 阅读 · 0 评论 -
高阶开发基础——目录部分
笔者最近打算收尾基础部分,为后续更加具体的高阶项目领域开发打下更为坚实的基础,笔者决定在这里架设一个基础部分的开发。目前,笔者决定初步学习经典的音频开发,为后续物联网嵌入式开发做一部分铺垫。原创 2025-02-03 13:23:44 · 222 阅读 · 0 评论 -
高阶开发基础——在WSL中快速部署一个极简的C++开发环境
笔者最近打算深入的整理一份基于Arch WSL的最简单纯粹的C++配置。使用的方案是使用GCC作为编译器,CMake作为项目构建脚本,VSCode作为代码编辑器,使用clangd作为强大的语言服务器和检查器,使用clang-format整理格式化我自己的代码。如果你愿意跟我一起,请跟随我的步伐一一配置。原创 2025-02-03 13:20:53 · 1723 阅读 · 0 评论 -
高阶开发基础——快速入门C++并发编程1
这个部分是高阶开发的第一个基础部分,也就是并发编程。笔者需要激进的假设各位已经掌握了基本的C++语法。学习过经典的计算机四件套中的计算机组成原理,操作系统。对并发已经有了最初步的认识。这里,笔者打算做一个偏向于总结性质的博客笔记。来在后续学习更加高阶的开发的时候理解并掌握并发和异步的知识。原创 2025-02-03 12:45:50 · 1013 阅读 · 0 评论