zoukankan      html  css  js  c++  java
  • 笑对 死锁

    第一次听到这个词是在今年九期师哥李社河讲的,大概是关于我们学校的考试系统,因为死锁引起了一些列的问题,最终被社河师哥解决,当时,听到死锁这个词,可谓是一头雾水,什么都不知道,什么都不明了,事后也查过死锁这个词,但是,还是不明所以

     

    没有想到,在我们学习自考的操作系统中,就有一小章节来专门讲了这个死锁,顿时,又懵了,看书,上网,总算是有了点体悟:(个人学习理解,不一定对,日后定有更新)

    要说死锁的形成,就要讲一下什么是并发进程,因为,死锁是当一组进程(至少有两个),它们中的每一个进程都占用了某种资源,而又都在等待其他进程所占用的资源,造成组进程一直处于等待不能结束的状态如图:

     

    下面给大家解释一下,如图所示,进程T1占用了资源R1,进程T2占用了资源R2,可是,大家知道,处理器一次只能执行一个进程,所以要想进程T1或者T2结束进程并释放资源的话,就要等着对方先把资源释放出来给自己,但是要命的是双方都是这么想,所以就一直僵持,等着对方把资源释放,可是由于进程进行所需要申请的资源被对方占用并且不能释放,所以,造成一种死等待,就是死锁。不知道这么说大家能理解不能

    其实在我们的社会中,也有不少类似死锁的问题,其中最形象的是交通:

     

    就像这幅交通图,四个方向的车就好比一组四个并发进程,他们只需要直行,中心路就就是他们所欲要的资源(共享),可是,这个资源被其他方向的车占用,导致自己的车想通过路口就要让其他所有停在路口的车让开,可每个司机都是这么想,所以就一直等待啊等待,等待啊等待,一直也没有结果,为了解决这个问题(交通死锁),我们装上了交通红绿灯(我们的PV操作)

     

    同样,针对我们电脑编程上的死锁,我们也有解决办法:

    通过总结,我们得出,系统出现死锁必须同时保持四个必要条件:

    1、互斥的使用资源(一个资源每次只能给一个进程使用)

    2、占有等待资源(当一个进程申请资源得不到满足的时候,会处于等待状态且由于没 有之行结束,不会 释放所占有的资源)

    3、非抢夺是分配资源(不能抢夺对方已占用的资源)

    4、循环等待资源

     

    有了这四条,我们就可以见缝插针,对症下药了

    一、死锁的防治:

    1、静态分配资源(通俗点讲,就是在进程开始执行之前,就将其所需要的资源全都备 齐,不需要再额外 申请资源,可是,这大大的降低了资源的利用率啊)

    2、按序分配资源(给资源编上大小号,规定所有申请两个以上资源的进程都要先申请 小号资源,逐渐加 大,这样就避免了所有进程都处于等待别人的占用资源的现象)

    3、剥夺式分配资源(这就不用多说了吧)(目前只适用于处理器和主存资源的分配)

    举个例子:

          

    就拿课本上的例子来说,五个哲学家,五根筷子,一盘面,每两个人之间放一根筷子

    如果这些哲学家懂得谦让还好,一个人吃完另一个人在吃,就都能吃到,可是,谁又想饿着呢?如果每个人都拿起自己身边的一根筷子,就没个人就只有一根筷子,结果还得到别人给自己一根让自己吃,怕就怕每个人都这么想

    解决办法:

    1、P1分两根筷子,P5分两根筷子,等自己吃饱后,就把自己手中的两个筷子一起传给 下一个人(还没吃 饭的)——静态分配法

    2、给筷子编上号,1,2,3,4,5,规定,每个人拿自己身边筷子的时候必须从小号开始,有     了小号才能拿 大号,否则乱棍打死,这样,不管怎么样,肯定有至少一个人能吃到 面,当他吃饱后把筷子放回 去,别人也就能吃饭了——按序分配法

    3、看谁壮谁就能吃饭,打架夺筷子——剥夺式分配资源



    小结,吃个饭,真不容易


  • 相关阅读:
    12、mybatis学习——mybatis懒加载的设置
    11、mybatis学习——自定义结果映射resultMap以及关联查询
    10、mybatis学习——sqlmapper配置返回list和map结果集
    9、mybatis学习——sqlmapper配置中#{}和${}的区别
    8、mybatis学习——sqlmapper配置文件参数处理(单个参数,多个参数,命名参数)
    7、mybatis学习——mybatis基础增删改&&mybatis获取自增主键
    6、mybatis学习——mapper映射配置
    5、mybatis学习——mybatis多数据库厂商支持
    [20180927]ora-01426.txt
    [20180928]ora-01426(补充).txt
  • 原文地址:https://www.cnblogs.com/DoubleEggs/p/5747202.html
Copyright © 2011-2022 走看看