0
点赞
收藏
分享

微信扫一扫

(5.1)死锁之死锁的概念和死锁的起因


文章目录

  • ​​1.哲学家就餐问题​​
  • ​​2.死锁的定义​​
  • ​​3.死锁的起因​​

1.哲学家就餐问题

  • 五个哲学家围坐在圆桌边,有5只筷子。哲学家:思考-休息-吃饭
    要求:吃饭时,要使用两只筷子
    那一双筷子才能吃;
    每次只取一只筷子;
    只取身边的筷子;
    吃完放下筷子
  • 用线程Philosopher实现哲学家的生活

//筷子编号:0-4,哲学家左手边筷子编号与哲学家编号相同
int S[5]={1,1,1,1,1};//信号量:i号筷子是否可用:0不可用,1可用
UNIT Phiosopher (int i)//线程函数,i是哲学家的编号
{
while (TRUE)
{
思考;
休息;
//使用PV操作实现互斥
P(S[i]);//取左手边的筷子===========若每个哲学家的线程函数都运行在这里,导致所有哲学家都在:取右手边的筷子
P(S[(i+4)%5]);//取右手边的筷子===========全部哲学家阻塞,发生死锁
吃饭;//正在用两只筷子
V(S[i]);//放下左手边的筷子
V(S[(i+4)%5]);//放下右手边的筷子
}
}

(5.1)死锁之死锁的概念和死锁的起因_死锁

2.死锁的定义

  • 两个或者多个进程无限期地等待永远不会发生的条件的一种系统状态。
    结果:每个进程都永远阻塞
  • eg:用哲学家吃饭问题解释:
    每个哲学哲学家都无限期地等待邻座放下筷子!
    而另作没有吃饭之前不会放下筷子;
    而邻座缺一只筷子永远都无法吃饭
  • 另一个定义:
    在两个或多个进程中,每个进程都持有某种资源,但又继续申请其它进程已持有的某种资源。
    此时每个进程都拥有其运行所需的一部分资源,但是又都不够,从而每个进程都不能向前推进,限于阻塞状态,这种状态称之为死锁

3.死锁的起因

  • 系统资源有限
    资源数目不足,进程对资源的竞争而产生死锁
  • 并发进程的推进顺序不当
    进程请求资源和释放资源的顺序不当,导致死锁
  • eg:假设i和j是独占性的资源(eg:键盘,打印机)
    i或者j没有被释放前不能被其它进程访问
    A,B尽管并发争用i,j,且发生了阻塞,但是没有死锁
  • (5.1)死锁之死锁的概念和死锁的起因_系统资源_02


  • (5.1)死锁之死锁的概念和死锁的起因_死锁_03

  • eg:假设i和j是独占性的资源(eg:键盘,打印机)
    i或者j没有被释放前不能被其它进程访问
    A,B分别在第4行阻塞,等待对方释放j和i:死锁
  • (5.1)死锁之死锁的概念和死锁的起因_ios_04

  • 不正确的P-V操作也可能会带来死锁,eg:生产者和消费者问题
    (1)生产者和消费者问题的正确操作的P-V操作
  • (5.1)死锁之死锁的概念和死锁的起因_ios_05

  • (2)生产者和消费者问题的错误操作的P-V操作
  • (5.1)死锁之死锁的概念和死锁的起因_系统资源_06

  • 关于死锁的一些结论
    (1)参与死锁的进程至少是2个:两个或以上的进程才会出现死锁
    (2)参数与死锁的所有进程都在等待资源
    (3)参与死锁的进程是当前系统中所有进程的子集
    (4)死锁会浪费大量系统资源,甚至导致系统崩溃


举报

相关推荐

0 条评论