操作系统
文章平均质量分 81
谁把钱丢了
欢迎访问个人博客:jmyblog.top
展开
-
IO概念&5种IO模型介绍
ForeWord 本文介绍了IO概念和5种IO模型,希望能以最轻松的方式让大家理解这两个知识 ٩(๑>◡<๑)۶ 开始啦。。。。。。。 ~tips:全文阅读需3min~Concept IO叫做输入输出,我们可以将IO理解为两步:等待IO事件就绪数据就绪后进行真正意义上的IO(真正的数据搬迁)所以,IO的过程一是等,然后才是输入输出。进而,我们可以得到评价IO是否高效的标准:原创 2017-07-05 18:41:13 · 3385 阅读 · 2 评论 -
线程互斥与同步(part3)—解决线程同步的”扛把子“:单身狗-信号量( Semaphore)
前言在上篇博文中博主介绍了解决线程同步的条件变量,它和第一篇的互斥锁是一对’cp’。想了解的小伙伴可以点击这里:linux线程互斥与同步(part2)—互斥锁(Mutex)的“cp”:条件变量(Condition Variable)那么这篇博文就为大家隆重介绍线程同步的另一个重要概念:信号量( Semaphore)一个游戏信号量的概念在进程里也有,它是用来描述临界资源的数目的,关于信号量最重要的就是原创 2017-05-31 11:25:53 · 1088 阅读 · 0 评论 -
线程互斥与同步(part4)—终结篇:“一股清流”—读写锁(rwlock)
前言在博主上篇博文中,讲述了解决线程同步的“扛把子”信号量,并用代码实现其应用。欢迎小伙伴们围观!详情点击:linux线程互斥与同步(part3)—解决线程同步的”扛把子“:信号量( Semaphore)接下来博主将详细介绍linux线程互斥与同步的完结篇:读写锁(rwlock)一股清流为什么把读写锁称为一股清流呢?只因它是一种比较特殊的锁。那它特殊在哪里呢,我们先来讲一个不悲伤的故事:王铁锤和李狗原创 2017-06-02 13:56:33 · 924 阅读 · 2 评论 -
线程互斥与同步(part2)—互斥锁(Mutex)的“cp”:条件变量(Condition Variable)
前言在博主的上篇博文中介绍了linux线程互斥的原因,并引入了互斥锁(Mutex)来解决问题,点击这里听互斥锁讲述它的的故事:linux线程互斥与同步(part1)—互斥锁(mutex)的原理及其实现机制那么本篇博客就继续介绍关于linux线程互斥的另一个重要概念:条件变量(Condition Variable)条件变量(Condition Variable)和互斥锁(Mutex)的“cp”关系有句原创 2017-05-28 09:44:26 · 1794 阅读 · 1 评论 -
线程剖析(part2)—线程控制及线程属性
前言在博主的上一篇博客中讲述了线程的基本概念及线程创建,没有看过的小伙伴可以点击这里:linux线程剖析(part1)—1个“假”的tcb本篇博文将重点从两个方面:线程控制(线程等待、线程终止)及线程属性来进一步分析线程特点。线程终止首先,我们需要知道线程终止的几种方式:1.从线程函数中return(特殊:从main函数中return,代表进程退出,也代表主线程退出。那么此时线程必定被终止。) 2原创 2017-05-26 17:56:36 · 732 阅读 · 0 评论 -
linux线程互斥与同步(part1)—互斥锁(mutex)的原理及其实现机制
一段代码引发的问题首先,我们来编写一段代码,它的目的是定义一个全局变量,创建两个线程对其进行5000++的操作。运行结果如下: 当然,目前来看,这段程序并没有任何的问题。然而,对于此程序,结合线程的特点,我们需要明确两点:局部变量 i 不是共享的,因为它在栈中gCount是共享的,因为它是全局变量,属于代码段。我们知道,只要是共享的资源,那么它就可以看作临界资源,而临界资源的访问需要同步与互原创 2017-05-25 20:52:18 · 11220 阅读 · 7 评论 -
linux线程剖析(Part1)—1个“假“的tcb
linux的“假”线程先说一句废话:线程是在进程内部运行的一个执行分支。这是现在大多数计算机书籍对线程概念的描述。然而,对大多数人来说(比如我),仍然不(yi)知(lian)所(meng)云(bi)。为了深刻理解这句话背后的含义,我们先来看一张图:我们知道,vfork函数是用来创建子进程的。且该函数创建出的子进程与父进程共用一个地址空间。所以,可以将父进程中的代码和函数分解,并分别交给这些子进程并行原创 2017-05-25 10:15:08 · 3011 阅读 · 1 评论 -
可重入函数与线程安全
一个问题为了理解可重入函数的概念,我们先来看这样一个例子:main函数调用insert函数向链表中头插节点node1,插入操作分为两步。假设它刚做完第一步的时候。由于硬件中断使进程切换到内核。再次回用户态之前检查到有信号待处理,于是切换到sighandler函数,sighandler也调用insert函数向同一个链表中头插节点node2。把插入操作的两步都做完之后从sighandler返回内核态,再原创 2017-06-11 12:30:15 · 458 阅读 · 0 评论