自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 啊哈算法关于快速排序法为什么一定要从右边开始的原因 (因为while循环的结束条件)

因为啊哈算法上基数选在左边 也就是6 最后循环结束要将6和 比它小的数 2 交换 这是从右边开始的循环 while(arr[j] >= temp && i < j){ j--;}我们一定要清楚循环终止条件 因为循环条件是 arr[j] >= temp 所以循环结束时 j肯定指向 小于基数 6的值 2上 所以从右边先走,最后肯定是j...

2018-04-30 18:38:51 1825

原创 (c语言实现)二叉树的相关操作 (二) 二叉树节点操作

本文所指二叉树 皆为普通二叉树,下同二叉树的定义在介绍相关操作时,请记住一点, 二叉树构建核心思想是递归, typedef char treeNodeType;typedef struct _treeNode{ struct _treeNode* left; struct _treeNode* right; treeNodeType value;}...

2018-04-30 11:28:58 1496

原创 (c语言实现)二叉树的相关操作 (一) 二叉树的递归遍历和循环遍历

本文所指二叉树 皆为普通二叉树,下同二叉树的定义最淳朴的二叉树,左右节点各一个… 在介绍相关操作时,请记住一点, 二叉树构建核心思想是递归, typedef char treeNodeType;typedef struct _treeNode{ struct _treeNode* left; struct _treeNode* right; tr...

2018-04-29 14:46:25 1196

原创 初探守护进程,使用setsid()创建守护进程

守护进程介绍 Daemon()程序是一直运行的服务端程序,又称为守护进程。通常在系统后台运行,没有控制终端,不与前台交互,Daemon程序一般作为系统服务使用。Daemon是长时间运行的进程,通常在系统启动后就运行,在系统关闭时才结束。一般说Daemon程序在后台运行,是因为它没有控制终端,无法和前台的用户交互。Daemon程序一般都作为服务程序使用,等待客户端程序与它通信。我们也把运行的...

2018-04-29 10:22:02 837

原创 Linux中的进程组概念

进程组在我们学习线程时知道,一个进程内可以有多个线程同时运行,多个同时运行的线程叫做线程组. 线程组中还会有一个主线程,它的线程ID等于该线程组的组ID pid = tgid类似的,也有多个进程同时归为一组的概念, 就是进程组,进程组就是多个进程的集合,其中肯定有一个组长,其进程PID等于进程组的PGID 其中 & 表示后台运行的意思 我们通过管道创...

2018-04-28 22:01:30 9258

原创 多线程(进程)中死锁的产生和如何避免死锁

死锁由于两个或者两个以上的(进程)去抢夺一份资源而造成阻塞的状态叫做死锁, 如果出现了死锁,会造成线程的循环等待,如果没有外力的帮助,就会一直维持着某种状态 死锁的产生死锁的产生有如下四个必要条件       1. 资源是互斥的,同一时刻只能有一个进程占有该资源       2. 资源的释放只能有该进程自己完成       3. 线程在获取到需要资源之前,不会释放已有资源...

2018-04-26 21:05:09 2935

原创 通俗易懂的 01背包问题

问题描述 有一个W容量的背包.和 I个物品,其中每个物品重 weight[i] 每个物品的价值为value[i] 问在不超过背包容量的情况下,怎么装入物品,可以使背包内的物品价值达到最大,其中对于每个物品, 只能选择放或者不放问题分析乍一看无从下手,但是认真分析以下就可以得出 : 假设在放入 i - 1个物品后,背包里物品重量是total_weight,价值...

2018-04-25 10:40:37 385

原创 多线程中经典的生产消费者模型

买票问题这是一个在多线程中必遇到的问题, 多个线程抢一张票, 如果不加限制会出现买票 卖出负票或者 多个线程买重票的问题所以线程在访问临界资源时应该上锁出现负票的原因线程 1 2 同时 1票 线程二 取 1票 ->判断1票可以 -> 保存上下文 切换-> 线程1 执行完 1 - 1写回内存 票 0切到线程二 (由上下文得知 已经进行过判断 直接...

2018-04-24 18:15:48 1022

原创 线程和线程的等待分离

线程和进程的区别在操作系统中,进程是提供程序运行资源的最小单位,而线程是调度这些资源的最小单位,也称作该进程的执行流. 在一个进程运行时,它的地址空间和另一个进程是独立的.也就是说他们的资源是独有的,一个进程在正常情况下是看不见另一个进程的资源的(除了进程通信)而在一个进程内部的多个线程,他们是运行在一个地址空间范围内的,所以它们可以看见和共享 进程 提供的资源所以操作系统创作一个进...

2018-04-22 13:13:34 974

原创 多线程中 关于条件变量和互斥锁的疑惑(纯干货)

条件变量的执行过程(伪代码)int pthread_cond_wait(&cond,&wait){ int ret = pthread_cond_wait_and unlock(&cond,&wait);//进入阻塞状态后解锁 pthread_mutex_lock(&lock);//再去竞争锁 return ret}条件变...

2018-04-18 09:58:50 2263 1

转载 Makefile中的ifeq 多条件使用

Makefile中的ifeq 多条件使用网上关于makefile中ifeq的介绍已经很多了,为什么我还要在写这篇文章,因为他们只说了if else两种条件的情况,并没有讲多于两种条件情况的使用。多于两种情况的使用很简单,害我尝试很多种方法,如ifeq elifeq等等这些。其实就如同c中的if [else if] [else if]…else的使用一样, 举个我使用的例子,Android...

2018-04-17 20:51:36 6710

原创 进程的信号和signal() sigactoin()函数

使用ctrl + c杀死进程在Linux中假设我们写了一个死循环的程序,然后运行起来.那么这个程序一直就在执行循环体内的内容.如果让这个程序停下来呢?我们通常都会用 ctrl + c “杀死”这个程序.其实ctrl+c是一个硬件中断,当cpu接收到这个硬件中断后,会停止执行用户态当前的代码.cpu从进程的用户态切换至内核态, 这时候驱动程序将 ctrl +c 翻译为一个SIGINT...

2018-04-12 21:09:29 658

原创 使用信号量解决哲学家饥饿问题

问题背景最近操作系统课上看见了哲学家饥饿问题,很感兴趣就在网上搜索了一下.n哲学家进餐问题描述有五个哲学家,他们的生活方式是交替地进行思考和进餐,n哲学家们共用一张圆桌,分别坐在周围的五张椅子上,在圆桌上有五个碗和五支筷子,n平时哲学家进行思考,饥饿时便试图取其左、右最靠近他的筷子,只有在他拿到两支筷子时才能进餐,n进餐完毕,放下筷子又继续思考。约束条件 (1)只有拿到两只筷子时,...

2018-04-10 17:05:24 4083

原创 进程间通信(四) 信号量

信号量的作用我们知道如果多个进程在访问临界资源时如果不加限制,那么就会出现进程对资源的争用,可能会出现结果的错误,更严重会造成进程的死锁生活中也有很多例子,例如一个打印机在某个时刻只能打印一份文件,而且在这个文件打印完之前是不能打印其他文件的,因为打印机是共享的,就是临界资源,必须保证打印机的同步与互斥信号量就是控制临界区域的临界资源的一种手段信号量信号量可以抽象为一种数据...

2018-04-09 16:39:10 150

原创 进程间通信(三) 共享内存

共享内存共享内存是Linux下俩进程通信的一种方式, 主要功能是让两个进程的虚拟地址都映射到同一片物理地址上,就可以通过这片物理地址进行数据的交互常用实现方法mmap() mmap函数要求内核创建一个新的虚拟内存区域,最好是从地址start开始的一个区域,并将文件描述符df指定的对象的一个连续的片映射到这个新的区域,连续的对象片大小为length字节,从距文件开始处偏...

2018-04-08 16:54:28 431

原创 进程间通信(二) 消息队列

区别于管道1.不同于管道面向字节流,它是以数据块为单位进行传送的(消息队列类似于网络通讯协议中的UDP,管道类似于TCP) 2.区别于管道生命进程随进程,消息队列的生命周期是随内核的 3.区别fifo管道的先进先出,消息队列读取是并行的消息队列消息队列是系统的ipc资源, 操作系统为每个ipc资源都统一维护了一个数据结构ipc_permstruct ipc_perm...

2018-04-05 14:11:21 652

原创 进程间通信(一) 管道

进程在各自运行时具有独立性, 表现之一就是每个进程都占有一份独立的虚拟空间,如何让两个进程进行通信 有很多方法,这里介绍其中最常见的方式之一 管道管道的特性与介绍管道的名字就已经很形象了, 就像水龙头,水从一端进入,一端出去,而且是单向流动,不可能出现打开水龙头又发现水倒着流入的状况同样流入的水和流出的水没有有显著的区分比如不可能把流入水管里的水划分出ABCD段,然后一段一...

2018-04-04 11:35:55 263

空空如也

空空如也

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

TA关注的人

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