摘要: 信号的表示 我们知道linux下,可以通过kill命令向进程发送信号. 当进程收到信号,执行处理动作被称为递达; 当进程接收到信号,还未来得及处理被称之为未决(pending); 进程可以选择阻塞某个信号,当某个信号被阻塞(block)时,永远不会递达! 因此,与这三种处理相对应,在进程的pcb中, 阅读全文
posted @ 2017-06-28 16:00 Linux专题站 阅读(1158) 评论(0) 推荐(0) 编辑
摘要: 一、线程安全 线程安全是指在多线程环境中,对临界资源进行加锁保护,不会出现数据不一致或数据污染.简单点来说,就是在多线程环境下并发运行,总是能得到正确的结果. 一般而言,线程不安全的原因往往在于对临界资源的访问没有进行特别的加锁处理. 不同的线程只有其私有栈空间与其寄存器的数据是私有的,其余都是共享 阅读全文
posted @ 2017-06-28 15:03 Linux专题站 阅读(449) 评论(0) 推荐(0) 编辑
摘要: 背景 我们知道,当一个进程fork出子进程后,没有对子进程进行回收,那么子进程运行完之后的状态会变为僵尸进程. 我们可以通过wait和waitpid来回收子进程,防止僵尸进程的出现. 但是wait和waitpid,要么以阻塞方式运行,要么以轮询方式运行,都极大的占用了CPU资源. 本文将介绍,父进程 阅读全文
posted @ 2017-06-27 21:50 Linux专题站 阅读(1667) 评论(0) 推荐(0) 编辑
摘要: 我记得,第一次将阿里云拿到手时,第一件事就是给它安装了一个unbutu14版本,第二件事就是对它进行update更新. 在输入apt-get update后,看到它开始更新软件列表时,我就想:诶?要是这个时候,我关闭掉ssh窗口,它更新还会不会运行? 略做思考,觉得这命令是运行在linux服务器上的 阅读全文
posted @ 2017-06-27 20:44 Linux专题站 阅读(445) 评论(0) 推荐(0) 编辑
摘要: 本文主要来总结生产者-消费者模型的代码实现,至于其原理,请大家自行百度. 一、基于链表的生产-消费模型(条件变量) 我们以链表为例,生产者进行头部插入,消费者进行头部删除,因此,先将链表相关操作封装为LinkList.h,具体代码如下: 然后进入我们线程的生产消费模型: 二、基于环形队列的生产-消费 阅读全文
posted @ 2017-06-27 17:08 Linux专题站 阅读(1174) 评论(0) 推荐(0) 编辑
摘要: 今天偶尔发现一个函数,很神奇,当我在考虑其用途时,灵光一现!突然好像明白了sleep底层的实现机制,因此我准备利用此函数来模拟实现一下自己的sleep函数! 核心函数一:pause 当该函数被调用时,进程会自动被挂起,直到有信号递达! 如果收到的信号的动作是结束进程,那么进程将会被结束. 如果该信号 阅读全文
posted @ 2017-06-26 16:53 Linux专题站 阅读(317) 评论(0) 推荐(0) 编辑
摘要: 一、信号量之创建信号量 key:由ftok函数生成,唯一. nsems:需要申请的信号量数目. semflg:IPC_CREAT,不存在则创建,存在则返回以后的semid IPC_CREATE | IPC_EXCL 不存在则创建,存在则出错返回-1. 二、信号量之PV操作 semid:信号量标识符 阅读全文
posted @ 2017-06-12 14:26 Linux专题站 阅读(1037) 评论(0) 推荐(0) 编辑
摘要: 本文主要通过消息队列的编程实例来加深对消息队列的理解. 一、消息队列之创建 创建一个消息队列,需要用到一个函数: key:需要调用ftok函数来获取. msgflg:IPC_CREAT,不存在则创建,存在则返回已有的qid. IPC_CREAT|IPC_EXCL,不存在则创建,存在则返回出错. ft 阅读全文
posted @ 2017-06-11 15:14 Linux专题站 阅读(6047) 评论(0) 推荐(0) 编辑
摘要: 一、概念 死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。 ——《百度百科》 二、四个必要条件 死锁的出现一定需要以下四个必要条件,缺一不可: 1.互斥条件,每次资源只能被一个进程所使用. 2.请求与保持,当一个进程/ 阅读全文
posted @ 2017-06-08 10:33 Linux专题站 阅读(168) 评论(0) 推荐(0) 编辑
摘要: 一、线程概念 我个人理解线程,说简单点,是程序的一个控制流程,从代码的角度来看,它控制着一个函数的执行; 说复杂点,在linux下,它就是一个进程(仅限linux),因为在linux下对于线程并没有特别的数据结构去描述它. 简而言之,线程是代码的一个执行流. 二、线程与进程的区别 线程与进程的区别, 阅读全文
posted @ 2017-06-08 09:47 Linux专题站 阅读(1291) 评论(0) 推荐(0) 编辑