- 博客(12)
- 收藏
- 关注
原创 进程间通信---共享内存
前边说过,进程间通信的实质就是让两个不相干的进程看到同一份公共的资源,而内存是资源的一种,那么,如果让两个进程可以使用同一块内存,两个进程都可以往这块内存里边写东西和取东西,这不就是实现了进程间的通信了么。通过共享内存实现进程间的通信,原理很简单,主要就是它的实现了。 每个进程都具有自己独立的地址空间,又怎么让两个进程共享同一块内存呢?我们都知道,给进程的地址空间其实都是...
2018-03-30 23:42:10 2490
原创 AVL树的旋转详解
二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素也就相当于是在顺序表中搜索元素,效率低下。因此,为了解决二叉搜索树中单支树的这种情况,两位俄罗斯的数学家G.M.Adelson-Velskii和E.M.Landis在1962年发明了AVL(平衡树):当向二叉搜索树中插入新结点后,如果能保证每个结点的左右子树高度之差(平衡因子)的绝对值不超过1(...
2018-03-30 11:11:04 343
原创 僵尸进程&孤儿进程
僵尸进程僵尸状态是一个比较特殊的状态,当进程退出并且父进程没有读取到子进程退出的相关信息就会产生僵尸进程。(可以理解为孩子死了还有遗言没有说给父亲听,导致有一口气一直咽下去,就变僵尸了)僵尸进程会以终止状态保持在进程表中,并且会一直等待父进程读取退出状态代码。即只要子进程退出,父进程还在进行,但父进程没有读取子进程状态,子进程就会一直保持在 僵尸状态(Z状态)。接下来用代码来体现一下这个过程#in...
2018-03-27 16:59:43 327
原创 进程间通信---消息队列
所谓消息队列,字面意思就是传递消息的队列,事实上也正是如此。消息队列提供了一种从一个进程向另一个进程发送一块具有类型的数据块的方法。那么什么是有类型的数据块呢? 先解释一下数据块,消息队列,首先它是队列,那么他可以使用顺序表或者链表两种常见的数据结构来实现。其次它是用于传递消息的队列,那么,肯定会频繁地往里边放消息,取消息,也就是说增、删操作比较频繁。很自然地,就应该想到使用链式结构来...
2018-03-26 19:25:26 170
原创 什么是进程?
程序:完成特定任务的一系列指令集合 代码段+数据段 -----放在磁盘中的程序 进程:进行就是正在进行中的程序 1、用户角度: 进程是程序的一次动态执行过程 2、操作系统: 进程是操作系统分配资源的基本单位,也是最小单位很抽象的概念,那么,到底什么是进程呢?又为什么要有进程?CPU一次只能处理一个程...
2018-03-25 12:10:57 31130 8
原创 怎么实现进程替换
当没有指定查找路径时Windows 会默认在当前路径下查找Linux 默认在系统规定的目录(规定的目录是在PATH里边写死的)去查找,是不会在当前路径里边查找的要想在当前目录下查找,必须把当前路径配到PATH里边去如何将进程的空间的替换掉?------加载程序加载器----exec系列的函数----将磁盘中的内容映射到内存中exec系列函数的原型int execve(const char* fil...
2018-03-25 09:55:15 702 1
原创 一次fork与两次fork的区别
在讲一次fork和两次fork之前,有必要先来简单讲解一下wait的作用1、阻塞当前进程2、获得子进程退出的相关信息(回收僵尸进程)子进程不返回,父进程后边的内容就没法执行。注:wait函数只能在有子进程的父进程中调用。我们使用fork()函数创建一个子进程出来往往是为了父子进程能够同时执行两段代码。如果在父进程中不写wait()会导致子进程在退出后变成僵尸;但是使用wait()又会导致父进程阻塞...
2018-03-24 21:42:41 3726 1
原创 进程间通信---管道
想必大家一定听说过这样一句话:Linux中一切皆文件。而管道就是进程间基于内存文件的通信机制。也是最传统的通信机制。管道,想象一下我们现实生活中的管道,都是有两端,两端都可以进,也都可以出。但是,我们都知道一般安装好了的管道都是一边用于进,一边用于出,毕竟使用管道就是用来帮我们传输一些流体的。相应的,在Linux中,我们也可以使用管道来传输我们所需要的数据流。匿名管道 ...
2018-03-22 13:06:58 192
原创 实现一个类只能在栈(堆)创建对象
禁用new运算符实现只能在栈上创建对象的类 其实只要不使用new操作符,类创建出来的对象就是在栈上创建的。但是,当你声明了一个类,难免会使用new操作符去创建一个对象,就算你能保证自己不使用new,也难以保证别人不去使用new。为了保证一个类的对象都是在栈上创建,那么,最有效的方式就是在代码中禁止使用new操作符。怎么实现禁用new操作符呢?其实很简单,将new和delete进行重载,...
2018-03-21 23:18:24 514
原创 简易进度条的实现
引子看如下程序:运行这个程序结果发现三秒过后会先输出haha 然后再输出hehe。(这个停留的三秒要自己去亲测感受一下,在图片上是看不出来的)接着看,当把sleep(3);放到fprintf(stderr,"haha");后边,然后再运行,会发现,会先输出haha,过三秒之后才会输出hehe这是为什么呢?其实输出函数printf在输出字符串“hehe”时,并不是说输入一个字符就将其输出,而是将它放...
2018-03-17 11:45:34 682
原创 不用+-*/实现加法运算
题目:实现一个Add函数,让两个整数相加,但是不能使用+ - * /等四则运算符。 从题目来看这道题还是比较苛刻了,其实解决起来也不难。既然不能使用四则运算,应该是本能的就想到使用位操作了。首先来讲解一下大致的思路,使用 异或^ 操作来完成对应位相加操作,再使用 按位与& 操作来记录有进位的位,将按位与&的结果左移一位来完成进位。将这两个操作放到一个循环中,直到没有进位为...
2018-03-04 23:49:19 1311
原创 多种方法实现加法求和
题目:求1+2+3+……+n的和,要求不能使用乘除法、循环、条件判断、选择相关的关键字。首先来回忆一下求1+2+3+……+n的和的最基础的几种解法:法1:int Sum(int n){ int sum = 0; while (n) sum += n--; return sum;}法2:int Sum(int n){ return (1 + n)*n...
2018-03-04 22:36:07 616
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人