`
luccs624061082
  • 浏览: 84757 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论
阅读更多
   并发应用程序及时执行的能力被叫做它的活性。这块描述了最普通的活性问题,死锁(deadlock),接着简单描述了两个其他活性问题“饥饿锁和活锁”;

死锁

死锁描述了一种情形,两个或者更多的线程徐翔阻塞。,互相等待对方。这里是一个例子。

Alphonse和Gaston是好朋友,非常看重礼节。礼节的一个严格规定是当你向一个朋友鞠躬的时候,你必须保持鞠躬状态知道你的朋友向你鞠躬。不幸的是,这中规定没有考虑到这种可能性两个朋友同时向对方鞠躬。这个应用例子,死锁,模拟了这种可能。

   public class Deadlock {
    static class Friend {
        private final String name;
        public Friend(String name) {
            this.name = name;
        }
        public String getName() {
            return this.name;
        }
        public synchronized void bow(Friend bower) {
            System.out.format("%s: %s"
                + "  has bowed to me!%n",
                this.name, bower.getName());
            bower.bowBack(this);
        }
        public synchronized void bowBack(Friend bower) {
            System.out.format("%s: %s"
                + " has bowed back to me!%n",
                this.name, bower.getName());
        }
    }

    public static void main(String[] args) {
        final Friend alphonse =
            new Friend("Alphonse");
        final Friend gaston =
            new Friend("Gaston");
        new Thread(new Runnable() {
            public void run() { alphonse.bow(gaston); }
        }).start();
        new Thread(new Runnable() {
            public void run() { gaston.bow(alphonse); }
        }).start();
    }
}



当死锁运行的时候,它极像两个线程努力调用bowBack时将互相阻塞。阻塞将永远不会结束,因为双方都在等待另一个退出bow。

饥饿和活锁

饥饿和活锁问题比死锁不常见。但是仍然是每个并发应用设计者可能遇到的问题。

饥饿

饥饿描述了这样的一种情形,饥饿描述的是一个线程不能定期的获取对共享资源的访问并且不能前进。当共享资源由于贪婪的线程长期占用而变得不可用就发生了。例如,假设一个对象提供了一个同步方法需要花费很长时间返回。如果一个线程频繁的调用这种方法,其他也需要频繁同步访问这个相同对象的线程就会被阻塞。

活锁(LiveLock)

A线程要以C线程执行后的响应才执行。如果B线程也是以C线程动作的响应才能执行。活锁就可能发生。和死锁一样,活锁的线程不能继续下一步动作。可是了,这些线程没有阻塞,它们只是忙于响应每个线程来重新工作。这就好比两个人在走廊中互相穿过对方:Alphonse 移动到他的左边让Gaston 过,而Gaston 移动到他的右边让Alphonse 过。看见他们仍然互相阻塞对方。Alphonse 移动到他的右边,而Gaston 移动到他的左边,他们仍旧阻塞对方,这样。。。。。
分享到:
评论

相关推荐

    A New Multispectral Method for Face Liveness Detection.

    ### 新型多光谱人脸活性检测方法 #### 摘要与引言 本文提出了一种新型的基于梯度的多光谱人脸活性检测方法,旨在解决当前人脸识别系统容易被照片、模仿面具、人体模型等欺骗的问题。随着3D打印技术的进步,伪造...

    Fingerprint Liveness Detection by Local Phase Quantization

    ### 指纹活性检测技术概述 #### 一、背景 指纹识别技术因其独特性和便捷性,在现代社会得到了广泛应用,从个人设备解锁到企业级的安全准入系统。然而,随着技术的发展,针对指纹识别系统的攻击手段也日益增多。...

    K8S – livenessProve – 存活性探测

    livenessProbe: 是指容器是否正在运行。如果存活性探测失败,则kubelete会杀死容器,并且容器受重启策略的影响。如果容器不提供存活性探针,则默认状态为Success。 [root@k8s-master01 k8s-test]# cat liveness.yaml...

    带有Kubernetes活性/就绪探测支持的akka-http微型健康检查库-Scala-下载

    Kubernetes提供了一种强大的机制来确保服务的高可用性和稳定性,其中包括活性探测(Liveness Probes)和就绪探测(Readiness Probes)。这些探测帮助系统识别应用实例是否健康,以及是否可以接受新的请求。 Akka-...

    paxo 经典介绍

    7. 活性(Liveness)和安全性(Safety)的一般术语:这两个术语在算法理论领域中分别代表了系统的正向运行(活性)和防止错误发生(安全性)。 8. 关键词:Paxos、异步一致性、故障容忍、复制、Lamport、拜占庭、...

    Alex1996a#golang-snippet#探针1

    1、restartPolicy, Always, OnFailure, Never 重启容器 2、有两种健康检查, Liveness 活性检查、Readines

    库所变迁系统

    活性(Liveness)是指系统的一种性质,其中任何变迁都能够在系统执行到一定阶段时发生。活性确保了系统不会出现所谓的“死变迁”,即由于某些条件永远无法满足而永远不会发生。活性与死锁概念紧密相关,一个具有活性...

    MANET路由协议的正确性分析 (2007年)

    首先给出了协议正确性的形式描述以及攻击者的形式定义,将协议的 正确性分为安全性( Safety property)和活性( Liveness property),前者指协议所发现的路由具有某些 良好的性质,后者指协议能够发现路由而且能够顺利地...

    6_Concurrent rebalancing of AVL trees_A fine-grained approach

    4. **安全性和活性证明**:并发算法的正确性通常涉及到两个关键属性:安全性(Safety)和活性(Liveness)。安全性确保在任何情况下,系统都遵循其规定的规则;而活性则保证系统在合理的时间内能够达到某种预期的...

    想要学习线性时序逻辑的论文

    在LTL中,两个关键概念是安全性(Safety)和活性(Liveness)。安全性关注的是“坏事情永远不会发生”,例如,程序不会违反某个断言。一个反例是一段有限的执行路径,导致了某种不良事件的发生。而活性则关注“好...

    jive编程思想

    1. **活性(Liveness)** Jive编程思想首要强调的是软件的活性,这意味着程序应该能够响应环境变化,自我更新并保持运行状态。开发者需要构建能够自我修复、自我优化的系统,以适应不断变化的需求和环境。 2. **...

    petri net

    ##### 3.7 备注:活性与无死锁性的对比(Liveness versus Deadlock-Freeness) 活性关注的是所有变迁的可能性,而无死锁性则更侧重于避免系统进入无法继续的状态。这两者之间存在一定的区别,但在实际应用中往往...

    Introductory Tutorial on Petri Nets.pdf

    5. **安全性与活锁**:Petri网的一个关键分析是安全性(Safety)和活性(Liveness)属性的检查。安全状态是指系统不会无限地消耗资源,而活性则确保系统总能继续前进,不会陷入死锁。 6. **应用**:Petri网在软件...

    kube-probe:openshiftkubernetes 的简单活性和就绪检查中间件

    这将添加 2 个GET端点/api/health/liveness和/api/health/readiness ,它们将返回200 OK响应。 该模块使用overload-protection来识别进程何时可能过载,如果服务负载过重,将返回HTTP 503 Service Unavailable 。 ...

    拜占庭容错算法原版(PBFT)

    算法设计方面,PBFT在安全性(safety)和活性(liveness)两方面均有所考虑。活性确保了系统在出现错误时仍然能够处理请求并给出响应,而安全性则保证了系统的响应是根据线性化准则(linearizability)来定义的,即...

    CSP概述、原理及应用.pdf

    - **系统属性**:除了上述机制外,CSP还强调了系统属性的重要性,特别是安全性(Safety)和活性(Liveness)。安全性确保系统不会进入某种不安全的状态,而活性则确保系统能够持续进行有意义的活动。CSP通过形式化...

    kube-probe:用于openshiftkubernetes的简单活动和就绪检查中间件

    这将添加2个GET端点/api/health/liveness和/api/health/readiness ,它们将返回200 OK响应。 此模块使用overload-protection来标识进程何时可能重载,如果服务负载过重,它将返回HTTP 503 Service Unavailable 。 ...

    PBFT算法流程补充(二):算法正确性证明及优化

    本文主要探讨PBFT算法的正确性证明,包括安全性(Safety)和活性(Liveness)两个方面,以及算法的优化策略。 1. **安全性证明**:安全性是PBFT算法的核心特性,确保系统在正常情况下不会出现冲突或不一致的结果。...

Global site tag (gtag.js) - Google Analytics