- 博客(50)
- 收藏
- 关注
原创 【Linux】生产者消费者模型 + 线程池的介绍和代码实现
本章我们将学习编程的一个重要模型,生产者消费者模型,并且运用之前学的线程同步和互斥的相关接口来实现阻塞队列和环形队列,最后再来实现一个简易的线程池
2024-07-27 22:03:40 571
原创 【Linux】线程的概念
可用于获取线程库对应的线程IDpthread_t 到底是什么类型呢?pthread_t类型的线程ID,本质就是一个进程地址空间上的一个地址。
2024-07-26 19:40:26 1095
原创 【Linux】进程信号的详细介绍
信号是给进程发送的,进程要具备处理信号的能力。用户输入命令,在shell下启动一个前台进程。用户按Ctrl +c, 这个时候键盘输入产生一个硬件中断,被os 获取,解释成信号,发送给目标前台进程。前台进程因为收到信号,进而引起进程退出。。Ctrl-C 产生的信号只能发给前台进程。(命令后面加个&可以放到后台运行,这样shell不必等到进程结束,就可以接收新的命令)Shell可以同时运行一个前台进程和任意多个后台进程,只有前台进程才能接到像 Ctrl-C 这种控制键产生的信号。
2024-07-21 21:03:45 1024 2
原创 【Linux】进程间通信之-- 共享内存与信号量的介绍(下)
可以将共享内存当成一个大字符串只要是通信双方使用shm,一方直接向共享内存中写入数据,另一方,就可以立马看到。共享内存是所有进程间通信(IPC)里速度最快的!,不需要过多的拷贝共享内存缺乏访问控制!会带来并发问题。因为有临界区资源问题,要做到同步管道通信过程演示:管道的通信,使用了read/write函数,会有访问控制,一共经历4次拷贝。。
2024-07-21 11:15:13 1038
原创 【Linux】进程间通信及管道详细介绍(上)
在使用系统调用pipe()创建管道时,pipefd[0]---------》管道读取端的文件描述符,pipefd[1]---------》管道写入端的文件描述符。管道是用来进行具有血缘关系的进程做进程间通信的–常用于父子通信管道具有通过让进程间协调,提供了访问限制。(读不到了会阻塞)管道提供的是面向流式的通信服务,—面向字节流,协议管道是基于文件的,文件的生命周期是随进程的,管道的生命周期是随进程的。
2024-07-20 21:29:26 647
原创 【Linux】理解文件系统
本章我们将学习学习认识一下磁盘的的物理结构,理解磁盘分区分块,如何对区块进行管理。学习认识 inode 和软硬连接。
2024-07-14 21:59:53 903 1
原创 【Linux】文件描述符
就是一段内存空间(这个空间谁提供的?用户char buffer[64] ,scanf(buffer)缓冲区在哪里?语言里面会设计,os 系统里面也会涉及。
2024-07-14 19:00:07 909
原创 【Linux】进程程序替换 + 模拟实现简易shell
上一节我们讲了进程终止和进程等待等一系列问题,并做了相应的验证,本章将继续对进程控制进行学习,我们将学习进程程序替换,进行相关验证,运用系统进程程序替换接口,自己模拟写一个shell,该shell能够实现执行指令,等一系列命令行操作
2024-07-14 14:58:48 583
原创 【Linux】进程控制的详细介绍
在此之前,我们学过进程的概念,进程的状态,进程地址空间等一系列进程相关的问题。本章我们继续学习进程,我们要来学习一下进程的控制,关于进程等待,进程替换等问题。
2024-07-13 20:07:20 1053
原创 【Liunx】进程地址空间
进程地址空间,就是操作系统给进程画的大饼,为了更好的维护进程彼此之间的独立性(每个进程都认为内存是从全0到全F的)。地址空间存在的最大意义让每一个进程都认为自己是独占系统中的所有资源的!!为什么操作系统让每一个进程都认为自己是独占系统中的所有资源?操作系统让每一个进程都认为自己是独占系统中的所有资源的,是因为这种抽象方式可以简化程序员的编程工作,同时也可以提高系统的安全性和稳定性。
2024-07-13 16:14:32 864
原创 【Linux】进程的概念 + 查看进程
系统中一定是存在各种资源的(不仅仅是CPU)网卡,磁盘,显卡都是资源;所以,系统中不只是只存在一种队列理解操作系统中的进程状态:a.新建b.运行:task_struct 结构体在运行,队列中排队,就叫做运行态c.阻塞:等待非CPU资源就绪,阻塞状态d.挂起:当内存不足的时候,Os通过适当的置换进程的代码和数据到磁盘,进程的状态就叫做挂起!尾声看到这里,相信大家对这个C++有了解了。如果你感觉这篇博客对你有帮助,不要忘了一键三连哦。
2024-07-07 10:43:51 997
原创 【C++】Cmake入门|掌握cmake的基本操作
如果这样编译直接运行,是肯定是Release的我们可以带上宏add_definitions(-D宏名称)这样是DEBUG模式了。
2024-06-23 16:20:41 1011
原创 【Liunx】基础开发工具的使用介绍-- yum / vim / gcc / gdb / make
在Linux下安装软件,一个通常的办法是下载到程序的源代码, 并进行编译, 得到可执行程序.但是这样太麻烦了, 于是有些人把一些常用的软件提前编译好, 做成软件包(可以理解成windows上的安装程序)放在一个服务器上, 通过包管理器可以很方便的获取到这个编译好的软件包, 直接进行安装.软件包和软件包管理器, 就好比 “App” 和 “应用商店” 这样的关系用gdb调试的时候非常麻烦比vs麻烦得多,但是在一些特定的场景下就是需要用gdb调试。程序的发布方式有两种,debug模式和release模式。
2024-06-16 20:33:27 869
原创 【Linux】权限管理
在我们日常的生活中,我们所接触的权限有,例如:某某视频软件,有的视频是需要vip客户才能观看,普通用户却看不了,这就是权限。到底什么是权限?(重点)约束人的需要对应的事物具有特定的属性。
2024-06-10 20:12:36 1136 1
原创 【C++】 单例设计模式的讲解
在我们的学习中不免会遇到一些要设计一些特殊的类,要求这些类只能在内存中特定的位置创建对象,这就需要我们对类进行一些特殊的处理,那我们该如何解决呢?
2024-05-23 21:06:56 962 1
原创 【C++】异常的详细讲解
实际使用中很多公司都会自定义自己的异常体系进行规范的异常管理因为一个项目中如果大家随意抛异常,那么外层的调用者基本就没办法玩了所以实际中都会定义一套继承的规范体系这样大家抛出的都是继承的派生类对象,捕获一个基类就可以了// 服务器开发中通常使用的异常继承体系public:,_id(id){}protected:int _id;//自定义捕获异常子类public:{}return str;
2024-05-18 16:29:33 533
原创 【C++11】可变参数模板、lambda表达式、包装器类及 bind函数 (下)
定义了一个可以调用的对象 / 匿名函数,一般定义在局部,特点是可以深度绑定了局部的数据。捕捉列表 参数 控制属性 返回值 函数体lambda表达式,实际上是一个匿名函数,实际上是在定义一个局部函数lambda表达式,通常是来定义小函数lambda表达式,在局部是很好用的普通函数有函数名,lambda函数没有函数名,他是一个整体。Add叫lambda表达式的对象 –-lambda定义的是一个对象捕捉列表,该列表总是出现在lambda函数的开始位置,
2024-05-18 11:20:06 1312
原创 【C++】STL 几种Iterators的详细介绍
前言:关于迭代器, 总共有五种:All random-access iterators are also valid bidirectional iterators.几种迭代器的关系如下:通过这个迭代器, 我们可以随机的存取容器中的元素。 所以, 如果我将迭代器加5, 那么我们的迭代器就向前移动5个元素(如下)等等。支持++ 、–、+ n 及-n如:向量(vector),string, 双向队列(deque), 数组(array)等容器类过这个迭代器, 我们可以对该迭代器自增(++, 对应向后移动一个
2024-05-17 19:11:03 311
原创 【C++11】列表初始化、右值引用的详细讲解(上)
C++11中新增了的右值引用语法特性。1.什么是左值?左值是一个表示数据的表达式,如:变量名或解引用的指针左值可以取地址一般情况下可以修改(const修饰的左值,不能被修改)左值可以出现赋值符号的左边,也可以出现在右边定义时 const修饰后的左值,不能给它赋值,但是可以取它的地址。左值引用就是给左值的引用,给左值取别名int main()// 以下的p、b、c、*p都是左值int b = 1;// 以下几个是对上面左值的左值引用return 0;2.什么是右值?
2024-05-12 21:53:42 497
原创 【C++】STL — map和set的使用详细介绍
使用 set 容器,必须引入该头文件#include < set >Set是按照一定次序存储元素的容器Set中的元素不能在容器中修改(元素总是const),但是可以从容器中插入或删除它们在set中,存放的是Value**(value就是key,类型为T),并且每个value必须是唯一的.**在内部,set中的元素总是按照其内部比较对象(类型比较)所指示的特定严格弱排序准则进行排序。
2024-05-12 17:54:46 869
原创 【C++】 认识多态 + 多态的构成条件详细讲解
虚函数: 即被 virtual 修饰的类成员函数称为虚函数。public:virtual void BuyTicket() { cout
2024-05-06 22:32:46 847 2
原创 【C++】继承 — 继承的引入、赋值切片详细讲解
继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构,体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。下面我们看到Person是父类,也称作基类。Student是子类,也称作派生类继承的格式:继承的本质是类设计角度的复用很多人说C++语法复杂,其实多继承就是一个体现。
2024-05-05 23:00:45 836 1
原创 【C++】模板进阶之 — 模板的特化详细讲解
通常情况下,使用模板可以实现一些与类型无关的代码,但对于一些特殊类型的可能会得到一些错误的结果,需要特殊处理,比如:实现了一个专门用来进行小于比较的函数模板
2024-05-05 15:26:08 1461
原创 【C++】STL —stack和queue的使用+适配器 和仿函数的使用 +priority_queue的模拟实现
本章将介绍STL六大组件中的 —— 适配器,在此基础上再学习stack、queue和priority_queue的模拟实现和仿函数的应用场景,最后介绍一下一个新的数据结构deque……
2024-05-05 11:01:04 1078
原创 【C++】STL — List的接口讲解 +详细模拟实现
list是可以在常数范围内在任意位置进行插入和删除的序列式容器,并且该容器可以前后双向迭代
2024-05-04 22:27:30 1019
原创 【C++】STL — vector的接口讲解 +详细模拟实现
vector是表示**可变大小数组的序列容器**。 - 就像数组一样,vector也采用的连续存储空间来存储元素。但是又不像数组,**它的大小是可以动态改变的**
2024-05-04 14:33:55 851
原创 【C++】类和对象--默认构造函数(中)
系统会自动生成默认的析构函数4.析构函数不能重载5.对象生命周期结束时,C++编译系统自动调用析构函数。
2024-04-21 11:33:03 614 1
原创 【C++】类和对象--初识类和对象(上)
声明和定义全部放在类体中,需注意:成员函数如果在类中定义,编译器可能会将其当成内联函数处理。类声明放在.h文件中成员函数定义放在.cpp文件中,注意:成员函数名前需要加类名::(声明和定义分离)
2024-04-20 16:45:29 922
原创 【C++】C++入门基础知识
在早期的C/C++中auto的含义是:使用auto修饰的变量是具有自动存储器的局部变量,但遗憾的是一直没有人去使用它。在C++11中,标准委员会赋予了auto全新的含义:auto不再是一个存储类型指示符,而是作为一个新的类型指示符来指示编译器,auto声明的变量必须由编译器在编译时期推导而得。return 10;auto b = a;//auto e;无法通过编译,使用auto定义变量时必须对其进行初始化return 0;【注意】
2024-04-14 22:37:59 671 1
原创 【Stl源码分析】list::sort使用举例--- Linux环境g++Release下vector数组排序和list排序效率测试
在学习C++的标准模板库的一些容器时,我们难免会遇到给序列排序的问题。
2024-04-14 14:46:27 425 1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人