【Linux】线程概念 | 互斥
千呼万唤始出来,终于到多线程方面的学习了! 所用系统Centos7.6 本文的源码👉【传送门】 [TOC] 1.线程的概念 在之前的linux学习中,已经接触过了进程的概念,进程由一个task_struct结构体在操作系统中进行描述,CPU在执行的时候,会依照进程时间片进行轮询调度,让每一个进程的代码都得以推进,实现多个进程的同时运行 而线程,可以理解为是一种轻量化的进程,每一个进程都可以创建多个线程,并行执行不同的代码 1进程:线程 = 1:N 在之前的多进程操作中,我们使用fork接口创建子进程,通过if/else语句判断,实现对特定执行流的划分 创建子进程时,需要拷贝一份task_struct/mm_struct并创建页表 当子进程修改了一部分变量,会发生写时拷贝,修改页表在物理内存上的映射 可以看到,当我们需要创建一个新进程的时候,操作系统需要做不少的工作 1.1...
【Docker】绿联nas部署mysql+wikijs
绿联nas部署mysql+wikijs
【Git】如何修改本地仓库的用户名和邮箱
如果你想在gitea上面加密存储一些数据(比如个人的密码)之类私密的东西,可以尝试用git-crypt加密文件后再上传 比如有些老哥担心git托管服务商会偷看自己的文件,额……咱也不能完全否认这可能性吧 如何使用 以下演示的只有windows系统能用 1.安装 oholovko/git-crypt-windows 在上面的项目中下载exe文件,放入你电脑git安装路径的git/cmd目录中,即可使用 在电脑的任意位置使用git的命令行输入git-crypt确认正确安装 2.使用 在需要加密的仓库中输入以下命令 1git-crypt init 然后输入status命令查看状态 1234PS D:\Program Files\nas\MyPWD> git-crypt statusnot encrypted: .gitignorenot encrypted: README.mdPS D:\Program Files\nas\MyPWD> 添加.gitattributes文件,键入以下格式的内容 1需要加密的文件路径或者文件名 filter=git-crypt...
【C++】图
本文包含了图的基本概念 1.相关概念 1.1 无/有向 无向图:每一个顶点之间的连线没有方向 有向图:连线有方向(类似离散数学的二元关系 <A,B>代表从A到B的边,有方向) 1<A,B>中A为始点,B为终点 在无向图中,(V,U)和(U,V)是同一条边 1.2 顶点和边 图中的节点叫做顶点。 顶点之间的线条就是边,表示事物与事物之间的关系。 1.3 自回路/多重图 1.4 完全图 图中每一个顶点都有连线(有最多的边数)就叫做完全图 设顶点为N个 无向完全图中n(n-1)/2条边 有向完全图中n(n-1)条边 1.5 邻接与关联 无向图中(u,v)是一条边 顶点u和v邻接 边(u,v)与顶点u和v相关联 1.6 子图 图中G3是G1的子图,G4是G2的子图 简单说来,就是子图是原图的一部分,包括顶点、边(注意方向)都是原图中的一部分 1.6 路径 路径是顶点序列 路径是一个节点到另外一个节点需要经过的边 路径长度:路径上边的数目 简单路径:除起点、终点可以相同外,路径中其余顶点不相同 回路:起点和重点相同的简单路径 1.7...
【C++】并查集
...
【Linux】进程通信 | 信号
本篇博客让我们一起来康康信号部分的内容 系统为CentOS7.6,完整代码见 Gitee [TOC] 1.什么是信号 在进程运行过程中,会出现各种各样的情况。操作系统需要用一套机制,来管理进程的事件 进程退出 进程停止 进程恢复运行 …… 同时,这套管理机制是异步的,属于一种软(件)中断 和硬件中断打断处理器类似,软件中断打断进程的执,让其执行对应代码进行响应 1.1 何为异步? 以网购物品为例:当商品寄到自提点的时候,会给你发送一条取件的短信(信号)。此时我正在打游戏,没时间去处理这个快递(即取快递的行为并不是必须立马执行) 但这个时候,我已经知道有一个快递到了(知道自己获取到了一个信号)本质上就是知道了一会要去取快递(一会要处理信号) 当游戏一把打完了,我们就去取快递了(处理信号) 这就是一种异步的过程。因为你不知道你的快递什么时候会到站点,进程也不知道自己什么时候会收到一个信号 1.2 信号的种类 使用kill...
【Linux】进程通信 | 共享内存 | 信号量
上篇Linux的博客是有关管道的,今日就让我们继续康康进程间通信的另外一种方法:共享内存 完整代码详见我的gitee仓库...
【Linux】进程通信 | 管道
今天让我们来认识如何使用管道来进行进程间通信 [TOC] 1.何为管道? 在最初学习linux的基础命令时,接触过用|来连接多个命令的操作。当时便提到了这是一个管道操作,但没有详解管道到底是什么。 1.1 管道是进程间通信的一种方式 管道管道,如同其名,是一个可以让数据在内部流动的东西。创建管道,就好比在两个阀门(进程)之间搭了一根水管,我们可以自由控制管道中水的流向 不过,在Linux系统中提供的管道接口,只支持单项流动。一个管道只支持从A->B,不支持B->A 要想进行双向通信,则需要创建两个管道 1.2 进程通信 既然管道是用来进程通信的,那进程通信又是什么,它有何用呢? 进程通信的目的是让两个进程可以相互交流,包括以下几种情况: 数据传输,从进程A发送数据道进程B 资源共享,多个进程使用同一个资源 通知事件,进程A向进程B发送消息,告知进程B发生了什么事件 进程控制,父进程通过管道来控制子进程的执行,进程A控制进程B的执行等等 除了管道,我们还可以通过systemV/POSIX来实现进程通信 进程通信的核心思想:让两个进程获取到同一份资源 1.3...
【Linux】动静态库
在最初学习GCC的使用的时候,提到了动态、静态库的创建办法。今天就让我们来详细了解一番,它们之间究竟有何不同吧! 演示所用系统:centos7.6 [TOC] 1.动态库和静态库 先来了解一下动态库和静态库的基本概念吧! 静态库.a 程序编译链接的时候,把静态库的代码连接到自己的可执行程序中,程序运行的时候将不再需要静态库 动态库.so 程序在运行的时候才去链接动态库的代码,多个程序共享库的代码 2.生成 测试所用代码 👉 点我 我写好了两个头文件和两个源文件,为了减少博客篇幅,此处只贴出.c的函数实现 12345678910111213//myMath.c#include"myMath.h"int Add(int a,int b){ return a+b;}//myPrint.c#include "myPrint.h"void Print(const char* msg){ printf("time: %d, msg: %s\n",(unsigned...
【Linux】文件IO
让我们来认识一下linux下的文件接口吧! 演示所用系统:CentOS7.6 本文所有代码都可以在我的gitee仓库查看【链接】 [TOC] 1.什么是文件? 文件=文件内容+文件属性,文件属性也是数据,即便我们创建一个空文件,也是会占用磁盘空间的 文件操作=文件内容的操作+文件属性的操作,在之前linux权限的博客里面就提到过,文件操作有可能即改变内容,又改变属性 文件打开操作其实是把文件的属性和内容加载到内存中,没有被打开的文件依旧处于磁盘当中 当前路径为当前进程所处的工作路径 我们的打开文件操作需要和磁盘这个硬件打交道,只有操作系统才能直接操作硬件。所以我们的文件操作其实都是调用的系统接口。 实际上,所有编程语言都对操作系统接口进行了封装,这样才能保证他们的跨平台性。因为不同操作系统的各种接口各不相同,如果不进行封装,直接调用系统接口,则该代码只能在指定系统上跑! 1.2 C语言文件操作 在学习Linux下文件相关内容之前,我们先来复习一下C语言的文件接口 12345678910111213141516171819202122232425262728void...