day33:共享内存和信号灯集

一、面试题:

1、简述信号量的原理?

信号量分为无名信号量和有名信号量

无名信号量多用于多线程之间的同步或者亲缘关系的进程之间的同步问题,规定了他们之间的顺序问题,防止发生竞态问题;无名信号量API主要包括定义、初始化、等待、释放和销毁,其本质是维护了一个value值,当线程需要消费的时候会申请资源,value>=1时,则申请成功value值减1,如果value值为0的时候则阻塞等待,当释放无名信号量后value加1,此时如果有等待的线程则运行。

有名信号量的本质和无名信号量类似,但是这是用于多进程之间的,首先会通过ftok造一把钥匙,只有通过钥匙才能进入信号灯集,之后便是构造一个信号灯集,而在这信号灯集中再创造出需要个数的信号灯,就是进程,这些进程中包含了结构体的数据,而其中就有vlaue,与无名信号量类似,当value有值时,向这个进程申请资源的进程就可以申请成功,之后运行申请资源的这个进程,在完成运行后释放资源,依次循环来达到进程间的同步问题的处理。

2、进程的通信机制?

进程间通信机制有六种:无名管道、有名管道、信号、消息队列、共享内存、信号灯集这六种,其中无名管道只能用于亲缘间进程,其他都是可以在非亲缘进程间完成通信

3、有名管道的原理?

有名管道是通过创造管道文件,不同文件打开这个管道文件来完成进程间通信,因此有名管道相较于无名管道,不需要存在亲缘关系,有名管道在读入数据后读取出数据,数据会被取出。                                                                                                       

4、用户进程对信号的相应方式?

信号是通过signal和kill、raise函数来完成对信号的处理和发送。用户进程对信号有三种应对方式:捕获、忽略、默认。

5、共享内存通信原理?

共享内存是在同一片物理内存,映射到内核空间的虚拟内存,不同文件对应的虚拟内存是不同的,而创建共享内存就相当于在内核空间中创造了一片空间,其对于进程而言类似于全局变量对于线程,在对这块空间进行读写时,写一次后其中就有东西了,所以如果去读会一直读这块内容,而且共享内存取出东西后还在;而写多次,后面内容会覆盖前面的内容,因为只有一块空间。共享内存不能用while(1)实现连续的读写,因为读会阻塞但是写不会,只要里面有内容就会一直读这块内容,因此需要引入信号灯集。

6、信号灯集的原理?

信号灯集能够完成在信号灯集中创建的进程之间的通信。通过创建一个信号灯集,再ftok出一把钥匙,只要获得钥匙才能使用该信号灯集。信号灯集中创建的进程,都有结构体,其中最核心的是value,与无名信号量类似的作用。

二、思维导图:有道云笔记

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值