生产者消费者问题、死锁问题
来源:大雄的学习人生     阅读:926
蜂鸟
发布于 2018-10-09 23:03
查看主页

生产者消费者问题

系统中有一组生产者进程和一组消费者进程,生产者进程每次生产一个产品放入缓冲区,消费者进程每次从缓冲区中取走一个产品并使用。
1. 互斥访问:缓冲区是临界资源,必需保证进程对其互斥地访问。
2. 同步访问:只有缓冲区有产品之后才能被消费,同时,只有缓冲区有空间时才能继续生产

如何用信号量机制实现生产者、消费者进程的这些功能?
设置三个信号量:一个互斥信号量,两个同步信号量
(实现互斥的 P 操作必需放在实现同步的 P 操作之后,否则会造成死锁,退出区的两个 V 操作可以互换)

semaphore mutex = 1;semaphore empty = n;semaphore full = 0;Producer () {  while (1) {    P(empty)    P(mutex);    生产    V(mutex);    V(full)  }}Cunsumer () {  while (1) {    P(full)    P(mutex)    消费    V(mutex)    V(empty)  }}

死锁

什么是死锁?
各个进程互相等待对方手里的资源,导致各个进程都阻塞,无法向前推进的现象。(对不可剥夺资源的不正当分配,可能导致死锁)
死锁产生的四个必要条件?
1. 互斥条件
2. 不剥夺条件
3. 请求和保持条件
4. 循环等待条件

预防死锁

破坏死锁产生的四个必要条件中的一个或者多个。
1. 破坏互斥:允许多个进程同时访问资源
2. 破坏不剥夺:操作系统强行剥夺
3. 破坏请求和保持:一次性分配所有资源(静态分配)
4. 破坏循环等待:

避免死锁

用某种方法防止系统进入不安全状态。(银行家算法)

死锁检测

为了对系统做死锁检测,必需满足:
1. 用某种数据结构来保存资源的请求和分配信息
2. 提供一种算法,利用上述信息来检测系统能否进入死锁状态

解除死锁的方法

1. 资源剥夺法。挂起(暂时放在外存上)某些死锁进程,并抢占它的资源,将这些资源分配给其余的死锁进程。
2. 撤销进程法。强制撤销部分、甚至一律死锁进程。
3. 进程回退法。让一个或者多个死锁进程回退到足以避免死锁的地步。

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境 服务器应用
相关推荐
nginx配置Proxy Cache缓存的12个指令
重拾python爬虫之urllib3
借助汇编语言命令操作文件夹
人工智能通识-科普-土耳其人下棋傀儡-5
电脑的哪些设置容易被黑客侵入
首页
搜索
订单
购物车
我的