自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(105)
  • 收藏
  • 关注

原创 掌握线程安全之道:线程互斥与同步技术解析

临界资源:多线程执行流共享的资源就叫做临界资源临界区:每个线程内部,访问临界资源的代码,就叫做临界区互斥:任何时刻,互斥保证有且只有一个执行流进入临界区,访问临界资源,通常对临界资源起保护作用原子性(后面讨论如何实现):不会被任何调度机制打断的操作,该操作只有两态,要么完成,要么未完成。临界资源和临界区进程之间如果要进行通信我们需要先创建第三方资源,让不同的进程看到同一份资源,由于这份第三方资源可以由操作系统中的不同模块提供,于是进程间通信的方式有很多种。

2024-12-28 19:06:11 976 16

原创 基于进程信号量的多线程同步机制研究与实现

信号量机制本质是对于资源的预订操作,线程或者进程预订了之后,确保未来有一段时间,资源是属于我的。对于预订资源,会有一个最小单位,资源都是以这个最小单位为整体被使用的。这里,由于是信号量的前导,我们简单的把信号量理解为一个计数器(是由OS维护的)。我们这里对于这个信号量的计数器的设计,提出几个问题?1.计数器能不能简单的设计成一个整型变量?

2024-12-28 19:05:45 604 3

原创 多线程编程初探:掌握基本概念与核心原理

线程的概念到线程的控制,以及Linux封装出来线程的底层实现的万字总结

2024-12-28 19:04:42 1215 1

原创 从零开始:实现进程间管道通信的实例

进程之间的通信的匿名管道和命名管道详细介绍。

2024-12-03 20:09:39 1091 41

原创 深入探索进程间通信:System V IPC的机制与应用

关于systemV三种通信方式的原理和概念的深入解析

2024-12-03 20:09:13 676 19

原创 进程间通信的信号艺术:机制、技术与实战应用深度剖析

信号的产生,信号的保持,信号的处理,万字总结

2024-11-21 19:41:08 891 23

原创 动静态库:选择与应用的全方位指南

由软硬链接到动静态库。

2024-11-21 19:40:18 1072 13

原创 手搓简易shell

这里就是,在学习了进程之后,利用创建子进程和进程程序替换,形成的简易版的shell

2024-11-03 15:49:42 311 6

原创 文件描述符fd 和 缓冲区

本文介绍的文件描述符如何让进程打开文件时如何管理文件,以及C语言在语言层面给用户提供的缓冲区

2024-11-01 20:57:21 795 1

原创 探秘磁盘内部的储存方式,揭露文件在软硬件上的不同模式

本文详细介绍了磁盘存储文件内容的基本模式,从硬件的物理存储模式,再到软件层的逻辑存储模式,以及两者之间如何进行转化。

2024-11-01 20:55:18 721

原创 Linux下的文件IO操作

本文主要讲解了,在Linux环境下一些C语言提供的文件接口,以及C语言文件接口底层封装的由操作系统Linux提供的系统调用接口

2024-10-28 20:15:02 1225

原创 Linux进程控制

本文是主要讲解了,Linux下的进程创建:包含了进程创建,进程退出,进程等待以及进程程序替换

2024-10-28 20:13:17 1298

原创 进程地址空间

关于进程地址空间的第一部分的介绍,详细介绍了进程地址空间,页表和物理地址之间的关系。深刻说明了进程地址空间和页表存在的意义。

2024-10-16 19:54:13 1049

原创 Linux下的环境变量

详细介绍了环境变量的概念和查看环境变量的方法

2024-10-16 19:53:10 846 1

原创 进程优先级

关于进程中优先级的概念的介绍,以及如何修改进程优先级

2024-10-11 19:55:36 382 2

原创 进程的调度和切换

本文主要介绍进程的调度和切换的基本概念,其中最主要的还是介Linux2.6内核进程调度队列的实现

2024-10-11 19:54:26 974

原创 描述进程和进程状态

一开始介绍进程的描述PCB,介绍了在Linux下进程的基本操作,fork函数的介绍以及操作系统下的进程状态和Linux下的进程状态

2024-10-09 17:14:16 1084

原创 操作系统软硬件方面的体系结构的认识

这是关于操作系统理论篇的开篇,着重介绍了冯诺依曼体系,和操作系统的基本架构

2024-10-09 14:30:37 913

原创 Linux调试器---gdb的使用

2.要改变的变量必须是被定义了 (就是在修改这个变量的时候,程序必须运行过这个变量定义的那条指令了)。debug模式下形成的可执行程序会给我们添加了调试信息,但是用户并不需要,他们需要更快的下载速度。relese模式下形成的可执行程序,会去掉调试信息,这样会让release模式下的可执行文件更小。gcc默认编译出来的可执行程序是release模式的,这个模式下的可执行程序是无法调试的,在使用gcc的时候,添加 -g 选项更改编译出来的可执行文件为denug模式。gcc默认链接时,链接的是动态库。

2024-10-02 15:59:41 893

原创 Linux下的git开篇第一文:git的意义

关于Linux下git的入门

2024-09-25 17:02:19 452

原创 Linux项目自动化构建工具-make/Makefile

因为会对时间进行一个对比,我们之间在VS上编译代码时,会发现我们解决了问题,但编译执行文件时依旧还是按照之前的程序执行,这就是因为VS识别文件不及时或者是没识别出来,还以为你的文件没有修改,所以他也没有对你的程序重新编译。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。不可能的,程序编译和代码修改都需要时间,逻辑上他们两个的时间根本就不会是一样的。

2024-09-23 16:27:21 880

原创 Linux编译器-gcc/g++使用

1. 预处理(进行宏替换)2. 编译(生成汇编3. 汇编(生成机器可识别代码)4. 连接(生成可执行文件或库文件格式gcc [选项要编译的文件选项] [目标文件先写好自己的文件,利用gcc编译好后会在当前目录下形成一个a.out文件,这个就是编译好的可执行程序。(上面程序有点小问题,格式不太好看)gcc在编译的时候,后面加上-o,就可以指定生成文件的名字。C语言可以用gcc和g++编译。c++只能用g++编译。

2024-09-20 10:17:16 1002 1

原创 验证二叉搜索树

这个就是Leetcode的官方写的题解,是不引入全局变量的写法,对于这个是否满足二叉树的情况,他传入了两个值,虽然两个值lower和upper都是当前根节点的值,但是,对于左右子树判断是否为二叉搜索树的意义是不同的。就是因为这道题目比较简单,我们的代码思路不在按照之前的三步走,我们反而去跟深层次的去理解一下全局变量,回溯,剪枝,在递归当中的意义。剪枝就是当没有判断到底时,但是,错误情况已经发生,结果已经明了,没有必要继续判断下去了,可以直接结束递归,出结果了,提升算法时间效率。

2024-09-17 15:53:43 335

原创 二叉树剪枝

目录1.题目解析2.算法原理讲解2.1重复子问题——>(函数头)2.2只关心其中一个子问题是如何解决的——>(函数体)2.3细节,递归出口——>(递归结束条件)3编写代码

2024-09-17 15:53:16 248

原创 Linux环境基础开发工具---yum

yum会有一个基础软件源,里面为了维持环境的稳定性,一定不会随随便便更新的,但是为了满足更新需要,此时就会有一个拓展软件源用于更新,当一个软件经过验证了之后才会被更新进入基础软件源。既然这些操作系统的侧重点不同,那么吸引到的人也不同,这些用户在社区讨论的问题也就不同,同样的,这些操作系统的配套设施,也肯定是围绕着自己的侧重点来建立的。但是,如果在使用虚拟机的时候,可能你的虚拟机还使用是国外的网址,这样就会导致你下载东西比较慢,这时候更新一下yum源就行了。CentOS-Base.repo:基础软件源。

2024-09-14 16:32:06 1028 1

原创 Linux环境基础开发工具---vim

vim是一款多模式的编辑器,里面有很多子命令,来实现代码编写操作。

2024-09-14 16:31:50 1058

原创 求根节点到叶节点数字之和

求根节点到叶子节点数字之和

2024-05-22 15:37:13 377

原创 计算布尔⼆叉树的值

计算布尔⼆叉树的值(递归解法)

2024-05-22 15:36:29 280

原创 Pow(x, n)- 快速幂(递归版)

快速幂的递归版本

2024-05-21 15:40:00 276

原创 两两交换链表中的节点(递归)

两两交换链表中的节点(递归版)

2024-05-21 15:39:36 250

原创 反转链表(递归)

力扣中反转列表的递归解法

2024-05-20 22:30:01 157

原创 Linux下的权限

Linux环境下的权限设置

2024-05-20 22:29:29 1446

原创 Linux下基本指令

Linux下的一些基本指令和Linux下的基本知识,适用于Linux上指令的入门

2024-05-12 14:35:48 744

原创 合并连个有序链表(递归)

宏观看待递归问题,三步法解决递归

2024-05-12 14:35:30 259

原创 汉诺塔问题

我们一提到汉诺塔问题就知道要用递归来解决,但是,我们并不知道为什么要用递归。接下来,我们就分析一下汉诺塔问题。

2024-05-11 20:50:33 244 1

原创 递归,搜索,和回溯算法

对于递归算法的介绍,和递归的写法的基本思路

2024-05-11 20:50:28 401

原创 stack和queue

1. stack是一种容器适配器,专门用在具有后进先出操作的上下文环境中,其删除只能从容器的一端进行元素的插入与提取操作。2. stack是作为容器适配器被实现的,容器适配器即是对特定类封装作为其底层的容器,并提供一组特定的成员函数来访问其元素,将特定类作为其底层的,元素特定容器的尾部(即栈顶)被压入和弹出。3. stack的底层容器可以是任何标准的容器类模板或者一些其他特定的容器类,这些容器类应该支持以下操作:empty:判空操作back:获取尾部元素操作push_back:尾部插入元素操。

2024-03-05 22:39:04 1258

原创 List类

1. list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代。2. list的底层是双向链表结构,双向链表中每个元素存储在互不相关的独立节点中,在节点中通过指针指向其前一个元素和后一个元素。3. list与forward_list非常相似:最主要的不同在于forward_list是单链表,只能朝前迭代,已让其更简单高效。4. 与其他的序列式容器相比(array,vector,deque),list通常在任意位置进行插入、移除元素的执行效率更好。

2024-03-05 21:55:37 930

原创 vector类

1. vector是表示可变大小数组的序列容器。2.就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问,和数组一样高效。但是又不像数组,它的大小是可以动态改变的,而且它的大小会被容器自 动处理。3.本质讲,vector使用动态分配数组来存储它的元素。当新元素插入时候,这个数组需要被重新分配大小 为了增加存储空间。其做法是,分配一个新的数组,然后将全部元素移到这个数组。

2024-02-22 22:10:52 983

原创 二叉树与堆

目录1.树概念及结构1.1树的概念1.2 树的相关概念1.3 树的表示1.4 树在实际中的运用(表示文件系统的目录树结构)2.二叉树概念及结构2.1概念2.2现实中的二叉树:2.3 特殊的二叉树:2.4 二叉树的性质2.5 二叉树的存储结构3.二叉树的顺序结构及实现3.1 二叉树的顺序结构3.2 堆的概念及结构3.3 堆的实现3.2.1 堆向下调整算法3.2.2堆的创建3.2.3 建堆时间复杂度3.2.4 堆的插入3.2.5 堆的删除3.2.6 堆的代码实现3.4 堆的应用3.4.1 堆排序3.4.2 TO

2024-02-22 20:24:08 1180 1

空空如也

空空如也

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

TA关注的人

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