⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 edgechasing.java

📁 用Java写的面相对象的数据库管理系统
💻 JAVA
字号:
// You can redistribute this software and/or modify it under the terms of// the Ozone Core License version 1 published by ozone-db.org.//// The original code and portions created by SMB are// Copyright (C) 1997-2000 by SMB GmbH. All rights reserved.//// $Id: EdgeChasing.java,v 1.5 2000/10/28 16:55:18 daniela Exp $package org.ozoneDB.core.dr;import org.ozoneDB.DxLib.*;import org.ozoneDB.core.*;import org.ozoneDB.util.*;/** * @author <a href="http://www.softwarebuero.de/">SMB</a> * @version $Revision: 1.5 $Date: 2000/10/28 16:55:18 $ */public final class EdgeChasing extends DeadlockRecognition {        protected Env env;            public EdgeChasing( Env _env ) {        env = _env;    }            public Locker detectDeadlock( Locker locker ) {        env.logWriter.newEntry( this, "*** detectDeadlock(): " + locker, LogWriter.DEBUG );        return sendLockMessage( locker, locker, true ) ? locker : null;    }             /**     * Recursive deadlock recognition.     * @return True, if this transaction is blocked by root (?)     */    public boolean sendLockMessage( Locker root, Locker locker, boolean firstLevel ) {        env.logWriter.newEntry( this, "*** sendLockMessage(): " + locker, LogWriter.DEBUG );        Lockable blocker = locker.blockedBy();        if (blocker == null) {            return false;        }                 if (!firstLevel) {            if (root == locker) {                return true;            }                         if (blocker == null) {                return false;            }         }                 //bin selbst beim warten auf blocker blockiert; wenn ich        //lese-lock setzen moechte, muss ich die ta mit schreib-lock        //auf blocker kontrollieren; wenn schreib-lock alle ta mit        //lese-lock auf blocker - diese werden genau von allLockers()        //geliefert                //alle ta, die mich behindern; entweder ein schreibende oder        //viele lesende transaktionen        DxCollection lockers = blocker.allLockers();        if (lockers != null) {            DxIterator it = lockers.iterator();                        while (it.next() != null) {                Locker nextLocker = (Locker)it.object();                if (nextLocker != locker) {                    //we are done if we have detected the first circle;                    //go on with next candidate otherwise                    if (sendLockMessage( root, nextLocker, false ) == true) {                        return true;                    }                 }             }         }         return false;    }     }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -