自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

贵在坚持,我相信只要我努力,未来肯定是美好的!

分享自己学习中对于知识点的累计和总结

  • 博客(186)
  • 收藏
  • 关注

原创 信号量(linux下的操作流程)

信号量目录:一.本质二.接口实现1.定义信号量2.初始化信号量3.P操作4.V操作5.销毁信号量目录:一.本质对于信号量的理解我在之前已经明确的讲解过了,在这里我只是来对于其接口和代码的实现进行详细的讲解!如何简单的理解信号量二.接口实现1.定义信号量2.初始化信号量3.P操作4.V操作5.销毁信号量对于比较简单的接口我就没有仔细的解释,后续会补充相关的代码理解和解释....

2021-04-21 20:20:04 384

原创 生产者与消费者模型 (详细理解)

都为

2021-04-21 18:20:56 232

原创 线程安全--同步的实现(必看干货!)

同步的实现目录:一.概念二.原理三.接口1.定义条件变量2.初始化条件变量3.让线程阻塞4.唤醒阻塞的线程5.销毁条件变量四.代码实现目录:一.概念通过条件判断实现对资源获取的合理性–也就是利用条件变量 条件变量: pcb等待队列+能够是线程阻塞以及唤醒线程阻塞的接口二.原理三.接口1.定义条件变量2.初始化条件变量3.让线程阻塞4.唤醒阻塞的线程5.销毁条件变量四.代码实现...

2021-04-21 11:55:15 179

原创 死锁

死锁目录:一.概述二.死锁产生的原因1.互斥条件2.不可剥夺条件3.请求和保持条件4.环路等待条件三.如何预防死锁四.如何避免死锁目录:一.概述程序运行流程因为某种原因卡死无法在继续运行叫做死锁.二.死锁产生的原因1.互斥条件一个资源同一时间只有一个进程/线程能够访问到 2.不可剥夺条件对于这个线程加的锁,只能这个线程来进行解锁,其他的不行 3.请求和保持条件线程加了A锁后请求B锁,B请求不到,A锁也无法释放 4.环路等待条件线程1加了A锁,请求B锁,线程2加了B锁,请求A锁. .

2021-04-17 17:44:59 112

原创 线程安全--互斥的实现(简单的理解互斥锁 ! !)

互斥的实现目录:一.概念二.原理三.接口1.定义互斥锁变量2.初始化互斥锁变量3.在访问临界资源的之前加锁4.在访问临界资源之后解锁5.销毁互斥锁四.代码实现目录:一.概念互斥其实就是线程安全的一部分,主要还是对于线程访问临界资源安全的保护. 互斥: 通过对于临界资源同一时间的唯一访问来保证访问操作的安全性二.原理对于互斥的实现其实底层就是对于互斥锁的使用三.接口1.定义互斥锁变量2.初始化互斥锁变量3.在访问临界资源的之前加锁4.在访问临界资源之后解锁5.销毁互.

2021-04-17 17:20:41 636

原创 怎样理解线程的等待和分离 ? ? ? (详细 ! !)

线程的等待和分离目录:一.线程的等待1.概念2.接口3.代码实现二.线程的分离1.线程的分离属性2.接口目录:一.线程的等待1.概念 关于等待的理解,就是等待一个指定的线程退出,获取线程的返回值,回收线程的资源,线程退出后,不会主动释放资源,需要被等待!! 2.接口利用这个接口就完成了对于线程等待的实现.3.代码实现通过这个接口获取到函数的返回值,并切让线程进行等待.二.线程的分离1.线程的分离属性 应用场景: 不关心线程的退出返回值,也不想等待一个线程的退出.2

2021-04-17 15:54:44 125

原创 理解每个线程的pcb内部的pid和tgid ? ?

pid/tgid的理解目录:1.概述2.实现代码3.运行结果4.对于tgid的理解目录:1.概述2.实现代码3.运行结果4.对于tgid的理解这篇博客中主要理解tgid的存储方式,以及为什么打印出来的是一个地址.

2021-04-15 15:08:04 427

原创 如何创建和退出一个线程 ? ? ? ?(详细 ! ! ! )

创建/退出线程目录:一.创建线程1.原理2.接口3.代码实现二.退出线程目录:一.创建线程1.原理因为在linux中并没有提供创建线程的接口,所以对系统调用接口实现了库函数的封装,才实现了用户态线程控制接口!2.接口3.代码实现可能出现的错误:正常运行:二.退出线程关于退出线程比较简单,我就不做过多的解释,具体的实现在上面的代码也有体现,大家看看就好了....

2021-04-14 18:43:46 208

原创 多进程和多线程的差别(优缺点)

多进程/多线程目录:一.多线程的优点二.多进程的优点目录:对于问多进程和多线程之间的差别的问题,其实我们只要表明我们所知道的多进程和多线程各自的优点就可以了.一.多线程的优点1. 线程间通信会更加灵活 (包括进程间通信在内还可以使用全变量和函数传参来实现)这里主要因为的是关于线程具体的虚拟空间地址的指向是同一块的,线程的创建并不是像创建进程一样全部复制,并且开辟对应的虚拟地址空间,线程是依赖于第一个开辟的虚拟地址,自己没有单独在创建虚拟地址空间的.2. 线程的创建和销毁成本比较低 .

2021-04-14 16:29:29 3662

原创 怎样才能简单的理解线程 ? ? ?(干货 ! ! ! !)

什么才是线程?一.线程的引入(重点 ! ! !)知识点:线程间的共享或独有对于多线程的理解我们下面分为四个方面来进行引入一.线程的引入(重点 ! ! !) 我们怎样来理解线程?? 在之前我们将pcb理解为了一个进程,而在这一步,我们会将最原始的这个理论进行打破,更新我们对进程和线程的理解,我通过下面一个简单的问题进行引入:知识点:线程间的共享或独有...

2021-04-14 16:06:23 142

原创 怎样理解SIGCHLD和SIGPIPE两种信号 ? ? ?

SIGCHLD&SIGPIPE两种信号:SIGCHLD信号SIGPIPE信号两种信号:SIGCHLD信号----一个子进程退出后,父进程发送的子进程状态改变信号重点理解:因为我们在写代码的时候,如果子进程一直都没有运行结束的话,如果按照我们之前说的让父进程一直等待子进程退出,那等待的时间有点长,而且会影响其他进程的运行,所以我们就将进程等待封装在另外一个函数的内部,当发现有子进程退出的时候,调用函数进行退出就可以了SIGPIPE信号----管道的所有读端发生了关闭,则write触发.

2021-04-10 20:06:00 207

原创 教你简单理解进程信号的阻塞 ! ! !

进程信号的阻塞目录:一.原理二.具体操作三.运行步骤四.对应接口目录:一.原理 信号的阻塞----阻止信号被递达当一个信号被阻塞的时候,依然会收到这个信号会注册,但是暂时不会被处理二.具体操作三.运行步骤四.对应接口对于下面的接口比较简单,大家直接在shell中进行运用就可以理解了....

2021-04-10 18:50:00 229

原创 怎样理解进程信号的处理 ? ?(超详细! ! !)

进程信号的处理目录:一.信号处理的概念二.信号的处理方式1.默认处理方式2.忽略处理方式3.自定义处理方式目录:一.信号处理的概念信号的处理也叫作信号的递达,实际上就是打断了进程当前的操作,去执行进程的对应信号处理函数二.信号的处理方式在处理完后会将位图上的数据抹去.1.默认处理方式----按照默认的方式处理,不添加其他的数据2.忽略处理方式----大多数信号都可使用这种方式进行处理,但是SIGKILL和SIGSTOP这两个信号不能被忽略,按照默认的方式进行处理.3.自定义处理方式-.

2021-04-10 17:03:16 273

原创 如何实现一个进程信号的注册和注销??

进程信号/注册/注销目录:一.进程信号的注册二.进程信号的注销目录:一.进程信号的注册在进程中注册一个信号让进程知道自己收到了某个信号----修改pending位图的,添加一个信号信息节点让所在的进程信号进入到对应的位图就是对于进程信号的的注册二.进程信号的注销注销: 将信号信息进程从pcb中移除 ----修改位图,删除节点...

2021-04-10 16:14:28 141

原创 进程信号的产生如何实现 ? ?(具体 ! ! !)

信号的产生目录:硬件产生软件产生目录:硬件产生就像我们平时对于电脑内部直接通过键盘输入的这三个指令:软件产生

2021-04-10 14:25:52 92

原创 什么是进程信号 ? ?(概述 ! ! !)

进程信号简介目录:一.概念二.种类目录:一.概念信号就相当于一个软件的中断----通知进程发生某个事情打断进程的当前操作,去处理这件事情二.种类通过指令 kill -l 打印出所有的信号:这就是进程信号的一些基础的概念理解,关于声明周期/阻塞之类的后续单独在博客内部介绍....

2021-04-09 11:30:30 205

原创 教你简单的来理解信号量 ! ! !

信号量目录一.信号量作用1.互斥2.同步二.信号量本质三.信号量的操作1.同步的实现2.互斥的实现知识点:ipc资源管理器目录一.信号量作用用于实现进程间的同步和互斥1.互斥通过保证对临界资源(就是内核中用于进程间通信的结构)同意时间的唯一访问保证访问操作的安全性.2.同步通过条件判断的方式来实现对于资源访问的有序及合理.这里类似于内核中利用pcb对多个进程的同时运行的操作,记录对应的位置来实现点击此处理解pcb二.信号量本质内核中的(system V标准信号量) 的计数器+pcb等待

2021-04-08 15:39:13 370

原创 怎样理解linux中的消息队列 ? ?(详细 ! ! !)

消息队列理解本质原理及步骤特性本质内核中的一个优先级队列原理及步骤特性1.自带同步和互斥2.生命周期随内核对于消息队列的理解我们只要理解其中的基本原理就可以,因为消息队列的实现完全可以用共享内存来实现....

2021-04-08 14:30:19 141

原创 怎样实现共享内存--进程间通信? ?干货 ! ! ! !

内存共享目录:一.概念二.原理三.操作步骤1.创建或打开共享内存2.在进程中与共享内存建立映射关系3.相关内存得操作4.解除进程与共享内存的映射关系5.释放共享内存目录:一.概念 内存共享是效率最高的进程间通信方式 怎样解释内存共享是最有效率的??举例,在管道的操作中始终都要将对应的数据写入的内核中的缓冲区部分,我们都要从其中发生两次拷贝,而对于内存共享只要找到对应在物理地址中的标识符就可以进行访问,不需要反复的拷贝,节省了两个步骤,所以内存共享被称为最高效率的进程间通信方式.二.原理

2021-04-02 16:55:35 359

原创 对于管道相关知识的总结/匿名/命名

管道总结目录:本质分类1.匿名管道2.命名管道特性1.半双工通信2.提供字节流传输服务3.自带同步与互斥4.管道生命周期随进程目录:本质内核中的缓冲区( 管道就是缓冲区,用来连接的是文件描述符 )分类1.匿名管道只能用于亲缘关系的进程间通信:----详细解释连接2.命名管道可用于同一个主机任意进程间通信:----详细解释连接特性1.半双工通信可以选择方向的单向通信2.提供字节流传输服务可靠的.有序的.基于连接的一种流式传输基于连接的:----1.所有的读端关闭,write

2021-04-02 13:32:36 250 2

原创 怎样理解命名管道 ? ? ?-进程间通信(干货 ! ! !)

命名管道目录:一.概念二.操作命令三.代码操作四.特性五.代码具体实现目录:一.概念命名管道的缓冲区具有标识符,能够被其他的进程找到,因此可以用于同一个主机的任意间进程的通信!二.操作命令三.代码操作四.特性1.如果命名管道以只读的方式打开,会堵塞直到这个管道被写的方式打开2.如果命名空间以只写的方式打开,会堵塞到直到这个管道被读的方式打开缺一不可!!!五.代码具体实现对于命名管道的理解,我们要写两个代码才能对其进行运行,否则它就会堵塞,直到另外一个方式开始运行.只有这两个

2021-04-02 12:52:44 251

原创 怎样理解僵尸进程/孤儿进程/守护进程? ? ?(一定要看 ! !)

特殊的三种进程I僵尸进程II孤儿进程III精灵进程/守护进程对于进程有三种比较特别的形式,下面具体讲解:I僵尸进程子进程先于父进程退出,但是父进程没有关注到其退出,因此系统不会完全释放子进程的资源,故而子进程进入僵尸状态如下图代码:运行代码进入进程然后我们可以详细的挑选输出有关这个文件的进程危害:资源泄露—pcb所占的内存无法收回—用户创建是有限的解决方案:处理:退出父程序避免:进程等待II孤儿进程父进程先于子进程退出,子进程成为孤儿进程,运行在后台,父进程变为1号进程.

2021-04-01 18:44:08 228

原创 匿名管道在进程间通信是怎样实现的??(详细 ! ! !)

进程间通信-管道目录:1.特性2.本质3.分类1)匿名管道2)命名管道目录:1.特性管道是用于传输数据的 属于半双工通信–可以选择方向的单向通信 2.本质管道就是内核中的一块缓冲区3.分类管道分为匿名管道和命名管道1)匿名管道2)命名管道...

2021-04-01 18:34:20 729

原创 什么是进程间通信?

什么是进程间通信?附:进程访问方式链接:点击此处通信方式有下面四种方法:进程间通信的方式:其实进程间通信就是调用了第三方内存进程处理的.大家理解就好.

2021-04-01 14:41:05 130

原创 什么是动态库?什么又是静态库?(如何生成/如何使用 ! ! !)

动态库/静态库目录gcc/g++的链接方式1.动态链接2.静态链接库的优缺点1.动态库的优点:2. 静态库的优点:库的生成库的使用目录gcc/g++的链接方式对于我们编译一段程序经常会需要调用一个函数库(就是存放了很多很多的代码),我们需要将自己写的代码和库进行连接,这样的链接有两种:动态和静态链接(默认动态)下面我们来详细的介绍1.动态链接2.静态链接既然我们大概的简述了两个库,下面我们来总结一下优缺点.库的优缺点1.动态库的优点: 1.共享2.代码冗余小3.便于代码模块的.

2021-04-01 12:59:25 1874 1

原创 怎样在自己写的shell中添加重定向原理 ?(详细 ! ! ! ! !)

shell实现重定向原理前提:代码的实现:实现步骤1. 在步骤键盘输入的时候查看是否有重定向的符号2.对子进程标准输出进行重定向或文件的信息不会随着程序的替换被消失前提:之前我写了一篇博客简单介绍了重定向的基本原理,大家先了解重定向的基本概念:重定义基本概念只要你理解了重定向的基本原理,剩下的就好解决多了,只要将之前写好的xshell中加上重定向的操作就好了.实现简单xshell链接代码的实现:我先将代码给出,然后对于代码的内容进行解释,这样比较直观一点.#include <stdio.h

2021-03-31 19:23:34 207

原创 怎样理解在C++11新出来的emplace函数 ? ?(干货 ! ! !)

C++11 emplace1.emplace2.emplace_back这是C++11新增的一个函数,其实和insert的利用有相似的地方,下面我们来做具体的解释1.emplace可以利用迭代器来自己控制要插入的位置struct A{ explicit A(int a, int b) //这里被explicit,故不能发生隐式类型转换 :_a(a) , _b(b) {} private: int _a; int _b; }; vector<A>v.

2021-03-31 16:15:44 578 1

原创 怎样vector内部的Modifiers(功能)进行实现 ?(详细 ! ! !)

vector5Modifiers(功能实现)1.assign1)通过输入对应元素来改变2) 通过迭代器来改变2.push_back3.pop_back4.insert1)插入单个字符2)插入多个3)插入对应范围内的字符串5.erase1)删除对应位置的字符2)删除范围内的字符串Modifiers(功能实现)这里主要涉及的就是对于单个元素的操作,主要理解和熟练使用这些操作的作用.1.assign1)通过输入对应元素来改变用来改变对应vector内部的空间元素值和空间内字节的大小 string.

2021-03-31 15:57:52 125

原创 怎样实现对vector类里面的元素进行访问???(干货 ! ! !)

vector4Element access(元素的访问)1.operator[ ]2.at3.dataElement access(元素的访问)我们在这里具体介绍三个主要的接口,剩下的大家主要用来自己编写,比较简单.1.operator[ ]主要就是利用operator[ ]将内部的值包含进来方便输出和改变其中的值.1)输出方式 string str = "1234567890"; vector<char>v(str.begin(), str.end()); for (si.

2021-03-31 14:34:55 1040

原创 怎样使用vector的Capacity接口?(详细 ! ! ! !)

vector3Capacity(内存容量)1.size2.max_size3.resize4.capacity5.reserve6.shrink_to_fitCapacity(内存容量)1.size用来看内部有多少个字节struct A{ A(int a = 1, int b = 2) :_a(a) , _b(b) {} int _a = 1; int _b = 2; }; vector<char>v1; //变量的创建 vector<int.

2021-03-30 18:52:49 382

原创 怎样使用vector内部的迭代器?(干货 ! ! ! 详细 ! !)

vector2Iterators(迭代器)1.begin/end2.rbegin/rend3.cbegin/cend4.crbegin/crendIterators(迭代器)对于vector内部的迭代器其实就是一个可以指向vector首尾的一个接口,学会调用其接口就可以了.1.begin/endbegin是指向首元素位置end是指向最后一个元素后面的位置的数据 string str("1234567890"); //在上一篇博客中讲到关于vector的创建 vector<cha.

2021-03-30 18:14:11 420

原创 怎样简单的创建一个vector类?(干货 ! ! !详细 ! ! ! ! !)

Vector接口介绍一.Member functions(创建)1.建立空vector2.建立内置类型vector3.建立自定义类型vector4.数组方式建立(赋值)5.迭代器方式建立二.Iterators(迭代器)三.Capacity(内存容量)四.Element access(元素的访问)五.Modifiers(功能实现)一.Member functions(创建)1.建立空vector2.建立内置类型vector3.建立自定义类型vector4.数组方式建立(赋值)5.迭代器方式建立.

2021-03-30 16:42:25 3806

原创 自己来实现一个String类?干货!!!!详细!!!!(补充)

实现String类的补充一.insert1.插入字符2.插入字符串二.erase三.find1.寻找对应字符数的位置2.寻找对应的字符串的位置四.选取字符串中的子串五.赋值运符补充operator >>operator <<这里对于String类的具体补充是让我们更加完善这个接口,在上一篇博客中 点击此处就是一个简单的手撕String,这里是补充,让我们对于String类的理解更加的深刻.一.insert1.插入字符比较简单,就是要对于其后面的元素进行后移的操作,复杂度比较.

2021-03-28 15:50:56 515

原创 什么是缓冲区?(详细!!!!!干货!!!!!)

缓冲区

2021-03-27 21:53:14 3627

原创 文件流指针和文件描述符之间的关系(干货!!!!!)

文件描述符的文件流指针的具体区别主要理解两者之间的区别,其实就是和封装有关的,大家具体看其中的内容.

2021-03-27 20:46:38 171

原创 对于文件描述符的理解(简单易懂!!!)

文件描述符我们在之前的时候讲过什么是进程,讲到pcb哪里的时候算是对于文件描述符的一个引入,让我们来具体的解释一下,要看之前的点击此处 这里的对应的0 1 2 3 这个结构体里面的下标就叫做文件描述符 ...

2021-03-27 19:57:11 161

原创 教你简单的理解-重定向原理(详细!!!!!干货!!!!!)

重定向原理一.我们来先介绍程序的空间内运行的加载方式:二. 函数介绍三.重定向实现四.具体语句解释总结看到这个概念,很多人都不明白重定向原理到底是什么?一.我们来先介绍程序的空间内运行的加载方式:二. 函数介绍dup2函数:将其中对应的程序文件进行交换 int dup2(int oldfd, int newfd); int oldfd : 需要替换的对应下标int newfd : 被替换的对应下标三.重定向实现既然我们已经介绍了这个函数,下面我们就通过代码看一看.四.具体语句.

2021-03-27 15:13:50 1368

原创 对于系统调用IO接口的具体理解(详细!!!!!)

系统调用IO接口目录:1.open2.write3.read4.lseek5.close目录:1.open这里是一个打开文件的操作,且对于被flags的操作我们可以通过或的方式对多个操作进行叠加 int open(const char* pathname,int flags,mode_t mode); 举例:int fd=int open("./test";O_RDWR;0777); 2.write ssize_t write(int fd,const void *buf,.

2021-03-26 11:52:19 250

原创 对于String 类相关接口的补充

Sting类接口的补充目录:1.修改操作erasereplaceswap2.字符串具体操作c_strfindrfindsubstrfind_first_not_of;find_first_of;find_last_not_of;find_last_of;目录:之前对于String类的接口介绍的还不够全,下面我对于String类的接口进行进一步的补充1.修改操作erase----是对于字符串的一个删除操作string& erase (size_t pos = 0, size_t len =

2021-03-25 21:49:15 66

原创 关于IO库函数接口的讲解(详细!!!)

这里写目录标题

2021-03-24 22:51:34 215

空空如也

空空如也

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

TA关注的人

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