信号量,进程互斥,进程管理等内容讲解
树图思维导图提供 信号量机制思维脑图 在线思维导图免费制作,点击“编辑”按钮,可对 信号量机制思维脑图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:bd31f30b3581641cae981c62e4929d0d
信号量机制思维导图模板大纲
用一个整数型变量作为信号量,数值代表某种资源数
对信号量只能初始化、P、V操作
不满足让权等待
P、V操作是原语
重中之重,见笔记,不乱
wait操作先value--,再判断是否<0
signal操作先value++,再判断是否<=0
value含义
S.value > 0,表示此类可用资源数量
S.value <= 0,表示此类资源已无,或还有因请求该资源而阻塞的进程,绝对值为等待该资源的进程数目
特点
除了有表示剩余资源数的整型,还有一个队列指针
软件实现互斥关注的是谁要使用资源,而信号量机制关注的是剩多少资源可使用
利用队列指针把不能使用资源的进程阻塞唤醒,从而不会出现无限循环,导致忙等
互斥
semaphore mutex = 1;
临界区前P(mutex)
临界区后V(mutex)
同步
判断事件的前后关系,然后判断引起事件的进程
该事件需要某信号量,前V后P
前者释放什么资源(后者申请什么资源),就V(S)(P(S))
大部分同步问题,某信号量的PV分别在不同的进程代码中
见笔记
生产者消费者问题及其变形
最基础empty = n,full = 0
多产品不同数量问题
如产品1取1件,产品2取2件才能组装
这种问题同步信号量为empty=n,产品1 = 0,产品2 = 0,产品1最大值 = n-2,产品2最大值 = n - 1
生产者生产前要检查是否有空位 + 是否达到最大值,否则会死锁
消费者取走产品后要V最大值
吸烟者问题
见笔记,比较基础
读者-写者问题
读者-写者问题在遇到互斥-不互斥问题时是通解,凡是不要互斥的都参考读者,凡是要互斥的都用一个信号量卡住彼此即可
利用int count实现了读-读不互斥,也因为这个当源源不断的到来读进程时,会导致饥饿
读写公平:信号量w,思想见笔记
写优先:实际上就是两个读者进程,只不过写者这个“读者”进程比较特殊,他一进来要锁住读者(信号量read),而读者把读写公平的w改为read即可,具体见笔记
哲学家进餐问题
这个笔记非常详细见笔记
申请多个资源不死锁
见笔记,只需要一个大锁和int型各个资源数
利用无限循环不阻塞
营业员与顾客问题
笔记上也有,四种情况很详细
AB数量差问题
见笔记,还有解释
杂碎注意
需要多个资源时,尤其多个P连在一起,要判断是否死锁
第一个数据必须P1读,第二个数据必须P2读 ...
初始S1 = 1,S2 = 0,S3 = 0。。。
P1中P(S1),V(S2)
P2中P(S2),V(S3)。。。
某进程连续N次操作后其余进程才能操作
mutex1 = 1;表示限制N次操作内的访问
P(mutex1);for(n次){} V(mutex1);
基本思想参考哲学家进餐问题中限制只能有n个哲学家同时进餐
解决信号量机制编程麻烦易出错的问题,封装思想
组成
共享数据结构
对数据结构的初始化
一组用来访问数据结构的过程(函数)
基本特征
各外部进程/线程只能通过管程提供的特定“入口”才能访问共享数据
每次仅允许一个进程在管程内执行其内部过程
管程中可以设置条件变量及等待/唤醒操作解决同步问题
管程可以实现互斥和同步
管程中条件变量x ≈ 信号量,但是wait、signal操作不判断x的值,只阻塞/唤醒
各进程必须互斥访问管程的特性由编译器实现
树图思维导图提供 未名湖案件思维导图 在线思维导图免费制作,点击“编辑”按钮,可对 未名湖案件思维导图 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:474dd24f7a220bf223a707ffee46939e
树图思维导图提供 解决手机瘾问题的脑图分析框架 在线思维导图免费制作,点击“编辑”按钮,可对 解决手机瘾问题的脑图分析框架 进行在线思维导图编辑,本思维导图属于思维导图模板主题,文件编号是:a8693e5d546b70eefd752a53b88a3782