2 qsjh898 qsjh898 于 2016.02.25 19:42 提问

Mina框架死锁检测算法的原理? 30C

private void checkDeadLock() {
if (!(this instanceof CloseFuture || this instanceof WriteFuture || this instanceof ReadFuture || this instanceof ConnectFuture)) {
return;
}
StackTraceElement[] stackTrace = Thread.currentThread().getStackTrace();

    // Simple and quick check.
    for (StackTraceElement s : stackTrace) {
        if (AbstractPollingIoProcessor.class.getName().equals(s.getClassName())) {
            IllegalStateException e = new IllegalStateException("t");
            e.getStackTrace();
            throw new IllegalStateException("DEAD LOCK: " + IoFuture.class.getSimpleName()
                    + ".await() was invoked from an I/O processor thread.  " + "Please use "
                    + IoFutureListener.class.getSimpleName() + " or configure a proper thread model alternatively.");
        }
    }

    // And then more precisely.
    for (StackTraceElement s : stackTrace) {
        try {
            Class<?> cls = DefaultIoFuture.class.getClassLoader().loadClass(s.getClassName());
            if (IoProcessor.class.isAssignableFrom(cls)) {
                throw new IllegalStateException("DEAD LOCK: " + IoFuture.class.getSimpleName()
                        + ".await() was invoked from an I/O processor thread.  " + "Please use "
                        + IoFutureListener.class.getSimpleName()
                        + " or configure a proper thread model alternatively.");
            }
        } catch (Exception cnfe) {
            // Ignore
        }
    }
}

这是Mina框架DefaultIoFuture中检测死锁的算法,有大神可以解释一下原理是什么吗?为什么在当前线程堆栈中调用了AbstractPollingIoProcessor就会造成死锁?

1个回答

devmiao
devmiao   Ds   Rxr 2016.02.25 21:57
qsjh898
qsjh898 这两个有关系?
2 年多之前 回复
qsjh898
qsjh898 这两个有关系?
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
银行家算法,死锁检测算法实践
银行家算法的手动实践,懒得写程序,会不会被打啊 (๑╹◡╹)ノ"""
死锁检测算法
#include <iostream> using namespace std; const int M = 3; const int N = 5; int Ava[M] = {3, 3, 2}; int All[N][M] = {{0,1,0},{2,0,0},{3,0,2},{2,1,1},{0,0,2}}; int Nee[N][M] = {{7,4,3},{1,2,2},{6,0,0},{0,1,1},{4,3,1}}; int work[N+1][M] = {{0,0,0},{0,0,0},{0,0,0},{0,0,0},{0,0,0}}; int flag[N][2] = {{0,0},{0,0},{0,0},{0,0},{0,0}}; int count = 0; void Safe(int num); int main() { int num = 0; for (int k = 0; k < M; ++k) { work[num][k] = Ava[k]; } Safe(num); cout << "total: " << count; system&#40;"pause"&#41;; return 0; } void Safe(int num) { if (num == N) { count++; for (int m = 0; m < N; ++m) { cout << flag[m][1] << " "; } cout << endl; }
Java中死锁的检测
死锁这个概念我相信大家都不陌生,现在的问题是在发生了死锁的时候我们怎么去检测死锁呢? 下面给出两种常用的方式来检测死锁。 我先给出一段运行在本地的死锁代码: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
分布式数据库中常见死锁检测算法分析
本幻灯片主要介绍了分布式数据库相关死锁检测算法的分析研究
操作系统面试—死锁(三)——死锁检测和死锁恢复
本文是对操作系统概念(第七版)——死锁的学习总结,不足之处,欢迎批评指正。 本文讨论的两块内容是死锁检测和死锁恢复。 1、死锁检测 首先针对每种资源类型只有一个实例的情况。 该算法使用资源分配图的一个变种,称为等待图。从资源分配图中,删除所有资源类型的节点,合并合适边,就可以得到等待图。 合并的过程如下:如果pi指向资源rj,而rj右指向pk,那么删除节点rj之后,直接得到pi->pk这
针对进程快照的死锁检测算法
输入格式: 进程数量 进程id 持有的锁id 等待的锁id 进程id 持有的锁id 等待的锁id 其中,每个进程可持有0个或多个锁,等待0个或1个锁; 检测进程情况是否存在死锁,若存在则输出死锁个数。 输入样例如下: 7 123 1001,1002 1003 127 1100 128 1010   129   124 1007 1008 125
读书笔记-现代操作系统-6死锁-6.3鸵鸟算法6.4死锁检测和死锁恢复
6.3 鸵鸟算法不考虑死锁问题。 因为实际工作中很可能有其他更为严重的问题。如果死锁的频率不高可不考虑死锁。6.4 死锁检测和死锁恢复6.4.1 每种类型一个资源的死锁检测步骤: 1. 对图中的每一个节点N,将N作为起始点执行下面5个步骤。 2. 将L初始化为空表,并清除所有的有向边标记。 3. 将当前节点添加到L的尾部,并检测该节点是否在L中已出现两次,如果是。那么该图包含了一个环(已列在
死锁的检测和解除
死锁的检测和解除
银行家算法。多类型资源死锁检测模…
#include using namespace std; int kind;//进程种类 int num;//所有种类的资源数 int *Avalible;//每个资源对应的可以获取的资源数的数组指针 int **Allocation;//已经分配的资源二维矩阵的指针,其中行数代表进程,列数代表该进程持有的某种资源 int **Need;//需求数组,即每个进程对应于某个资源的需求量的二维指针
dijask银行家算法死锁检测程序注释
Need 进程i所需要的各个资源的数目 available 当前cpu上可以使用的各个资源的数目 allocation 当前的各个进程的获得的资源的数目 finish 数组用来判断某一个进程是否完成 store 数组用来存放进程执行的过程 声明的函数的含义:Continue函数: 用来比较判断系统当前可用的进程是否足够完成执行某个进程,如果当前系统可用的资源数目小于该进