Unlike deadlock, livelocked packets continue to move through the network, but never reach their destination.

This is primarily a concern for non-minimal routing algorithms that can misroute packets.

If there is no guarantee on the maximum number of times a packet may be misrouted, the packet may remain in the network indefinitely.

Dropping flow control techniques can also cause livelock.

If a packet is dropped every time it re-enters the network, it may never reach its destination.

There are two primary techniques for avoiding livelock, deterministic and probabilistic avoidance.

In deterministic avoidance, a small amount of state is added to each packet to ensure its progress.

The state can be a misroute count, which holds the number of times a packet has been misrouted.

Once the count reaches a threshold, no more misrouting is allowed.

This approach is common in non-minimal, adaptive routing.

A similar approach is to store an age-based priority in each packet.

When a conflict between packets occurs, the highest priority (oldest) packet wins.

When used in deflection routing or dropping flow control, a packet will become the highest priority packet in the network after a finite amount of time.

This prevents any more deflections or drops and the packet will proceed directly to its destination.

Probabilistic avoidance prevents livelock by guaranteeing the probability that a packet remains in the network for T cycles approaches zero as T tends to infinity(无穷大).

For example, we might want to avoid livelock in a 2-ary k-mesh with deflection routing and single flit packets.

The maximum number of hops a packet can ever be from its destination is H_max = 2(k−1).

We then write a string for the history of a packet, where t denotes a routing decision toward the destination and d represents a deflection (such as tddtdtt . . .).

If the number of t ’s in the string minus the number of d’s ever exceeds H_max , then we know the packet must have reached its destination.

As long as the probability of a packet routing toward destination is always non-zero, the probability of this occurring approaches one.

Therefore, our network is livelock-free as long as we can always guarantee a non-zero chance of a packet moving toward its destination at each hop.

Livelock的更多相关文章

  1. 活锁(livelock)

    活锁(livelock) 活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败. 活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于 ...

  2. 有关于并发中的死锁(Deadlock)、饥饿(Starvation)、活锁(Livelock)

    最近在看<实战Java高并发程序设计>,发现了之前没有接触过的几个名词. 死锁:之前在接触多线程的时候,接触过死锁的情况.死锁是线程中最糟糕的情况,如下面的图中的四辆车子一样,如果没有一辆 ...

  3. “全栈2019”Java多线程第二十三章:活锁(Livelock)详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java多 ...

  4. 活锁(livelock) 专题

    活锁(livelock) 活锁指的是任务或者执行者没有被阻塞,由于某些条件没有满足,导致一直重复尝试,失败,尝试,失败. 活锁和死锁的区别在于,处于活锁的实体是在不断的改变状态,所谓的“活”, 而处于 ...

  5. .Net多线程编程—预备知识

    1 基本概念 共享内存的多核架构:一个单独的封装包内封装了多个互相连接的未处理器,且所有内核都可以访问主内存.共享内存的多核系统的一些微架构,例如内核暂停功能,超频. 内核暂停功能:当使用内核不多的时 ...

  6. 分布式系统理论进阶 - Paxos

    引言 <分布式系统理论基础 - 一致性.2PC和3PC>一文介绍了一致性.达成一致性需要面临的各种问题以及2PC.3PC模型,Paxos协议在节点宕机恢复.消息无序或丢失.网络分化的场景下 ...

  7. Concurrency vs. Parallelism

    http://getakka.net/docs/concepts/terminology Terminology and Concepts In this chapter we attempt to ...

  8. Questa Functional Verification-autocheck

    1.AutoCheck analysis introduce Autocheck是自动对RTL代码使用形式验证进行规则检查的检查器,是Questa Verify tools的一部分.Autochenc ...

  9. [转]透过 Linux 内核看无锁编程

    非阻塞型同步 (Non-blocking Synchronization) 简介 如何正确有效的保护共享数据是编写并行程序必须面临的一个难题,通常的手段就是同步.同步可分为阻塞型同步(Blocking ...

随机推荐

  1. 24 【python入门指南】class

    一.类 1.1,构造函数,析构函数 #!/bin/python class dog(): def __init__(self, age, name): self.age = age self.name ...

  2. SQL那些事儿(十一)--ODBC,OLE-DB,ADO.NET区别[转]

    一.ODBC   ODBC的由来 1992年Microsoft和Sybase.Digital共同制定了ODBC标准接口,以单一的ODBC API来存取各种不同的数据库.随后ODBC便获得了许多数据库厂 ...

  3. 宝塔Linux面板 概述

    安装要求: Python版本: 2.6/2.7(安装宝塔时会自动安装) 内存:128M以上,推荐512M以上(纯面板约占系统10M内存) 硬盘:100M以上可用硬盘空间(纯面板约占20M磁盘空间) 系 ...

  4. udevadm命令详解

    udevadm 后接一个命令和命令指定选项.它控制了udev运行的行为,处理内核事件,控制事件队列,并且提供简单的调试机制. 选项: --debug 打印错误信息 --version 打印版本信息 - ...

  5. 类似No module named 'bs4'等错误的解决方法

    最近开始接触爬虫,写了如下源代码: from bs4 import BeautifulSoup import requests url='https://www.tripadvisor.cn/Attr ...

  6. python 数据类型 之 集合

    集合是一个数学概念:由一个或多个确定的元素所构成的整体叫做集合 集合的三个特性: 1.确定性 (element必须可hash,不可变类型是可hash的) 2.互异性(集合中element 不能重复) ...

  7. table-layout 显示规则以及其他一些零碎的东西

    首先对中文显示的不够好 对中文失效  auto是表格的宽和高都会随着内容增多而改变  而fixed只会增加表格的高度   宽度不会发生改变  table中的td的宽,高会根据内容的多少而变化: fix ...

  8. Oracle_PL/SQL(2) 过程控制

    0.检索单行数据0.1使用标量变量接受数据例1: 7788declare v_ename emp.ename%type; v_sal emp.sal%type;begin select ename,s ...

  9. 使用/\_ 打印正三角形 C/C++

    输入size,level,使用/\_,打印正三角形 #include<stdio.h> int main() { int level, size; printf("Enter l ...

  10. hdu 5129 (枚举) The E-pang Palace

    题目;http://acm.hdu.edu.cn/showproblem.php?pid=5128. 给你n个点,问能否组成两个不相交的与坐标轴平行的矩形,能就输出两矩形的面积和,不能就输出一个字符串 ...