zoukankan      html  css  js  c++  java
  • 死锁与活锁的区别,死锁与饥饿的区别?

    死锁:是指两个或两个以上的进程(或线程)在执行过程中,因争夺资源而造成

    的一种互相等待的现象,若无外力作用,它们都将无法推进下去。

    产生死锁的必要条件

    1、互斥条件:所谓互斥就是进程在某一时间内独占资源。

    2、请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。

    3、不剥夺条件:进程已获得资源,在末使用完之前,不能强行剥夺。

    4、循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

    活锁:任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,

    失败,尝试,失败。

    活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而

    处于死锁的实体表现为等待;活锁有可能自行解开,死锁则不能。

    饥饿:一个或者多个线程因为种种原因无法获得所需要的资源,导致一直无法执

    行的状态。

    Java 中导致饥饿的原因

    1、高优先级线程吞噬所有的低优先级线程的 CPU 时间。

    2、线程被永久堵塞在一个等待进入同步块的状态,因为其他线程总是能在它之前

    持续地对该同步块进行访问。

    3、线程在等待一个本身也处于永久等待完成的对象(比如调用这个对象的 wait 方

    ),因为其他线程总是被持续地获得唤醒。

  • 相关阅读:
    事务的基本特性和隔离级别
    mysql锁的类型
    索引设计的原则
    mysql聚簇索引和非聚簇索引的区别
    spring事务什么时候会失效?
    spring事务传播机制
    GAN的Pytorch实现
    DCGAN的Pytorch实现
    PyTorch学习教程、手册
    去噪论文合集Paper
  • 原文地址:https://www.cnblogs.com/programb/p/13020854.html
Copyright © 2011-2022 走看看