
System Learn
文章平均质量分 80
fzzjoy
Code Change World
展开
-
可重入锁与不可重入锁以及常见的死锁现象
可重入锁和不可重入锁Mutex可以分为递归锁(recursive mutex)和非递归锁(non-recursive mutex)。可递归锁也可称为可重入锁(reentrant mutex),非递归锁又叫不可重入锁(non-reentrant mutex)。二者唯一的区别是,同一个线程可以多次获取同一个递归锁,不会产生死锁。而如果一个线程多次获取同一个非递归锁,则会产生死锁。Wind...原创 2019-08-27 23:42:40 · 10055 阅读 · 0 评论 -
IPC - 共享内存
IPC共享内存使用介绍及示例原创 2021-08-22 17:27:22 · 269 阅读 · 0 评论 -
进程 线程 协程
进程一个具有一定独立功能的程序在一个数据集合上的一次动态执行过程;进程有自己的代码段、数据段、堆、栈、程序计数器(PC)和一组通用的寄存器值以及相关的系统资源(如打开的文件),进程有内核态和用户态。线程进程中的一条执行流程用户线程内核线程轻量级进程进程和线程的区别协程参考:用户级线程和内核级线程,你分得清吗?用户态和内核态:用户态线程和内核态线程有什么区别?...原创 2021-08-22 11:45:55 · 215 阅读 · 0 评论 -
并发编程:互斥锁、信号量、条件变量
原子操作TAS:Test and Set,写值到某个内存位置并传回其旧值。汇编指令BSTCAS: Compare and Swap,操作过程:将内存位置V的值与A比较(compare),如果相等,则说明没有其它线程来修改过这个值,所以把内存V的的值更新成B(swap),如果不相等,说明V上的值被修改过了,不更新,而是返回当前V的值,再重新执行一次任务再继续这个过程。会存在ABA问题。FAA: Fetch And Add,一般用来对变量做 +1 的原子操作互斥锁的实现信号量的实.原创 2021-08-21 23:47:10 · 244 阅读 · 0 评论 -
程序内存模型和栈帧结构
程序内存模型在x86体系中,栈顶由ESP寄存器,也被称为栈指针来标记,它是一个32位寄存器,里面存放着最后一个压入栈顶的项的内存地址,栈顶是朝着内存低地址方向增长的;对于每一个进程,内核维护这一个变量brk(读作"break"),它指向堆的起始位置;程序栈的结构其中栈的结构是由栈帧组成,如下图所示:C/C++语言中的函数,对应汇编中的过程。一个过程调用包括将数据(以过程参数和返回值的形式)和控制从代码的一部分传递到另一部分。另外,它还必须在进入时为过程的局部变量分配空间,并在退出时释放这些原创 2021-06-23 23:58:56 · 352 阅读 · 2 评论 -
并行和并发的区别 进程和线程的区别
并行:同一时刻,有多条指令在多个处理器上同时执行。并发:同一时刻,只能有一条指令执行,但多个进程指令被快速轮换执行,使得在宏观上具有多个进程同时执行的效果。进程一般具有以下4大要素:1、有一段程序供其执行(该程序可以多个进程共用)。2、有专用的系统堆栈空间。3、在内核中有对应的进程控制块。4、有独立的存储空间,意味着拥有专有的用户空间。线程相对于进程而言原创 2015-04-08 15:21:48 · 3329 阅读 · 0 评论 -
多线程之间的通信
【同步和互斥的区别理解】同步:又称直接制约关系,是指多个线程(或进程)为了合作完成任务,必须严格按照规定的 某种先后次序来运行。即两个线程之间存在依赖关系。互斥:又称间接制约关系,是指系统中的某些共享资源(如全局变量、打印机等),一次只允许一个线程访问。当一个线程正在访问该临界资源时,其它线程必须等待。同步方式:事件(Event)、消息队列、管道(即进程间通信的管道,亦可实现线程之间的原创 2018-02-26 22:37:32 · 459 阅读 · 0 评论 -
进程间通信方法总结
无名管道(或称为管道)具有两个对外端口,一个称为读端,一个称为写端。一个进程在管道的写端写数据,另一个进程从管道的读端读取数据。管道仅局限于父进程与子进程之间的通信。管道通信的特点:1.管道通讯是单向的,有固定的读端和写端。2. 数据被进程从管道读出后,在管道中该数据就不存在了。3. 当进程去读取空管道的时候,进程阻塞。4. 当进程往满管道写数据时,进程阻塞。5原创 2015-10-28 15:57:50 · 459 阅读 · 0 评论 -
周转时间和带权周转时间的计算
周转时间=作业完成时刻—作业到达时刻;带权周转时间=周转时间/服务时间;平均周转时间=作业周转总时间/作业个数;平均带权周转时间=带权周转总时间/作业个数;例:有4个进程A,B,C,D,设它们依次进入就绪队列,因相差时间很短可视为同时到达。4个进程按轮转法分别运行11,7,2,和4个时间单位,设时间片为1。四个进程的平均周转时间为 ?解析:由于是视为同时到达,则原创 2015-04-09 11:53:01 · 97605 阅读 · 7 评论 -
IPC - 消息队列
参考书籍《Unix环境高级编程(第三版)》消息队列是消息的链表,存储在内核中,由消息队列标识符标识。其读写原则符合队列的先进先出原则。当然,这并不完全是这样的。我们可根据消息队列的每一条消息的标识符去读取指定的消息。发送消息数据的结构体可自定义为如下结构体:struct mymesg{long mtype;//消息标识符char mtext[512];//消息数据};原创 2015-05-22 21:04:49 · 458 阅读 · 0 评论 -
IPC - 管道(Pipe)
用于进程间通信的有5种常用方式:管道、FIFO、消息队列、信号量、共享存储等。管道 (亦被称为无名管道,以区分FIFO:有名管道)顾名思义具有两个对外端口,一个称为读端,一个称为写端。一个进程在管道的写端写数据,另一个进程从管道的读端读出数据。如下图所示:管道仅局限于父进程与子进程之间的通信。管道通信的特点:1.管道通讯是单向的,有固定的读端和写端。2. 数据被进程原创 2015-05-20 11:13:24 · 862 阅读 · 0 评论 -
IPC - FIFO
FIFO(有时也被称为有名管道,命名管道)使用方式与管道(PIPE)类似,可参考:http://blog.youkuaiyun.com/u010275850/article/details/45867621最大的区别就是FIFO可用于任意两个进程间通信。FIFO是一种文件类型,因此对于FIFO的操作类似于文件操作,如读、写、打开等操作。当open一个fifo时,非阻塞标志(O_NONBLOCK)会产生原创 2015-05-20 11:30:11 · 483 阅读 · 0 评论 -
IPC - 信号量
信号量是一个计数器,用于为多个进程提供对共享数据的访问,其值实则表征有多少个共享资源单位可供共享应用。为了获得共享资源,进程需要执行下列操作:1、测试控制该资源的信号量。2、若此信号量的值为正,则进程可以使用该资源。在这种情况下,进程会将信号量值减1,表示他使用了一个资源单位。3、否则,若此信号量的值为0,表明无可用资源,则进程进入休眠状态,直至其他进程不再使用共享资源,信号量的值增1原创 2015-05-26 15:31:33 · 582 阅读 · 0 评论 -
死锁4个充分不必要条件
去ZTE面试,被问到了以上的知识点,之前有涉猎过相关书籍了解过,由于在项目中体现的不多,导致概念理解不清析,回答起来也是模棱两可,太丢人了真是。现特此总结一下。当两个任务都在等待被对方持有的资源时,两个任务都无法再继续执行,这种情况就被称为死锁。死锁发生必须具备4个条件:1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其原创 2015-10-13 19:32:57 · 630 阅读 · 0 评论 -
优先级反转、优先级继承
优先级反转:准确来说,指的是一种现象,并非一项任务调度技术,即高优先级任务被低优先级任务阻塞推迟的行为被称为“优先级反转”。这是一种不合理的行为方式,如果把这种行为再进一步放大,当高优先级任务正等待信号量(此信号量被一个低优先级任务拥有着)的时候,一个介于两个任务优先之间的中等优先级任务开始执行——这就会导致一个高优先级任务在等待一个低优先级任务,而低优先级任务却无法执行类似死锁的情形发生。正原创 2015-10-13 20:23:55 · 4786 阅读 · 0 评论