首页 > 其他分享 >(二)避免死锁

(二)避免死锁

时间:2024-11-08 09:30:47浏览次数:3  
标签:Available 状态 避免 安全 死锁 序列 进程

(二)避免死锁

image


(1)安全序列与不安全状态

image

  • 安全序列: 指如果系统按照这种序列分配资源,则每个进程都能顺利完成。

只要能找出一个安全序列,系统就是安全状态。当然,安全序列可能有多个。

  • 不安全状态: 如果分配了资源之后,系统中找不出任何一个安全序列,系统就进入了不安全状态。

这就意味着之后可能所有进程都无法顺利的执行下去。当然,如果有进程提前归还了一些资源,那系统也有可能重新回到安全状态,不过我们在分配资源之前总是要考虑到最坏的情况。

——与死锁的联系:

如果系统处于安全状态,就一定不会发生死锁。如果系统进入不安全状态,就可能发生死锁。

(处于不安全状态未必就是发生了死锁,但发生死锁时一定是在不安全状态)因此可以在资源分配之前预先判断这次分配是否会导致系统进入不安全状态,以此决定是否答应资源分配请求。这也是“银行家算法”的核心思想。

(2)银行家算法

由 Dijkstra 提出,涉及深搜、回溯等。

  • 核心思想: 在进程提出资源申请时,先预判此次分配是否会导致系统进入不安全状态。如果会进入不安全状态,就暂时不答应这次请求,让该进程先阻塞等待。

通过不断循环检查最终得到安全序列的算法即安全性算法。

image

手算在一轮比较中,只要看到 Available 大于 Need 的进程,可以直接把 Available 与他们的 Allocation 相加然后就不用管它们(已完成),继续拿新的 Available 和其他新的进程比较。

标签:Available,状态,避免,安全,死锁,序列,进程
From: https://www.cnblogs.com/Wind730/p/18534483/2-avoid-dead-locks-36lho

相关文章

  • Java面试系列-MySQL面试题20道,InnoDB,索引类型,事务隔离级别,锁机制,MVCC,主从复制,慢查询,分
    文章目录1.MySQL中的InnoDB和MyISAM存储引擎有什么区别?2.MySQL中的索引类型有哪些?3.MySQL中的索引是如何工作的?4.MySQL中的事务隔离级别有哪些?5.MySQL中的锁机制有哪些?6.MySQL中的MVCC(多版本并发控制)是如何工作的?7.MySQL中的主从复制是如何工作的?8.MySQL中的分区......
  • 【多线程奇妙屋】收藏多年的线程安全问题大全笔记(下篇) { 死锁问题 },笔记一生一起走,
    本篇会加入个人的所谓鱼式疯言❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言而是理解过并总结出来通俗易懂的大白话,小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的.......
  • js内存泄漏几种方式及如何避免、内存溢出
    https://blog.csdn.net/Judy_qiudie/article/details/82845692 一、什么是内存泄漏(memoryleak)?参考阮一峰老师博客:http://www.ruanyifeng.com/blog/2017/04/memory-leak.html不再用到的内存,没有及时释放,就叫做内存泄漏(memoryleak)。程序的运行需要内存。只要程序提出要求,操......
  • 【C/C++】野指针概念以及避免方式
    C语言中的野指针详解野指针(WildPointer)是指向未定义或非法内存位置的指针。本博客讲解野指针的概念、产生原因、危害以及如何避免野指针的问题。1.什么是野指针野指针指的是未初始化或已经失效的指针变量。这些指针指向的内存位置不再有效,可能被系统回收或被其他变量使......
  • 揭秘晋升陷阱:如何避免彼得原理在技术团队中的影响
    如果你觉得这篇文章对你有帮助,请不要吝惜你的“关注”、“点赞”、“评价”、“收藏”,你的支持永远是我前进的动力~~~个人收藏的技术大会分享PDF文档,欢迎点击下载查看!!!摘要:本文以彼得原理为理论基础,分析了技术团队中晋升机制的潜在问题,并提出相应的解决方案。通过本文的分享......
  • 大数据新视界 -- 大数据大厂之 Impala 与内存管理:如何避免资源瓶颈(上)(5/30)
           ......
  • 《图解设计模式》 第九部分 避免浪费
    第二十章Flyweight模式publicclassBigcharFactory{//这里对使用到的内容进行了缓存privateHashMappool=newHashMap();//有则直接取,无则创建并保存到缓存。publicsynchronizedBigChargetBigChar(charcharname){BigCharbc=(BigChar)pool.get("......
  • Java多线程编程(三)一>详解synchronized, 死锁,wait和notify
    目录: 一.synchronized的使用:   二. 常见死锁情况: 三.如何避免死锁:  四.wait和notify一.synchronized的使用: 我们知道synchronized锁具有互斥的特点:synchronized会起到互斥效果,某个线程执行到某个对象的synchronized中时,其他线程如果也执......
  • Java开发人员必须避免的11种坏习惯
    Java开发人员必须避免的11种坏习惯您想成为codereview最喜欢的开发人员吗?您是否梦想将您的拉取请求与最小变更请求合并?您也想成为一名专业codereview吗?那您就来对地方了!您一定想知道,您为何应该关心?为了回答这个问题,我想说,掌握编写代码时的这些注意事项不仅仅是为了......
  • MySQL 死锁日志分析方法
    作者:京东物流张凯引言MySQL死锁是线上经常遇到的现象,但是死锁分析却并不总是件容易的事情,本文介绍MySQL死锁日志的分析方法,帮助研发从日志中快速提取有效信息,从而提高死锁原因分析的效率。 死锁介绍触发条件死锁的触发条件包括四个:•互斥•占有且等待•不可抢占用......