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

📄 fischer4.cta

📁 很好的一本书
💻 CTA
字号:
/*  * project: CTA-model of Fischer's mutual exclusion protocol. * modules: Process, System * author:  Dirk Beyer, 2000 * last change: 2001-03-28 mvogel *  * Based on: Leslie Lamport, "A fast mutual exclusion algorithm.", *           ACM Transactions on Computer Systems, 5(1):1-11, 1987. */   // This module represents the template for a Fischer process.MODULE Process{  // Constants for time bounds.  INPUT    // a is the maximal time the modelled assignment k:=1 needs.    // b is the minimal time the process waits for assignments    // initiated from other processes.    a:          CONST;    b:          CONST;    // Parameter for significant value of k.    processNo:  CONST;  MULTREST    // k is the flag for announcement.    k:  DISCRETE;  LOCAL    // A clock to measure the time in a state.    x:  ANALOG;  INITIAL   STATE(Fischer) = uncritical AND k = 0;    AUTOMATON Fischer  {    STATE uncritical { TRANS { GUARD k = 0;                                 DO x' = 0;                                 GOTO assign;			 }    }    STATE assign     { INV x <= a;                         DERIV DER(x) = 1;                        TRANS { DO x' = 0 AND k' = processNo;                                 GOTO wait;                       }    }    STATE wait       { DERIV DER(x) = 1;                        TRANS { GUARD x >= b AND k != processNo;                                 DO x' = 0;			       GOTO uncritical;		             }                       TRANS { GUARD x > b AND k = processNo;                                 DO x' = 0;                                 GOTO critical;                       }    }    STATE critical   { TRANS { DO k' = 0 AND x' = 0;                                 GOTO uncritical;		     }    }  }}MODULE System{  LOCAL    a = 3 : CONST;    b = 3 : CONST;    pNo1 = 1: CONST;    pNo2 = 2: CONST;    pNo3 = 3: CONST;    pNo4 = 4: CONST;  LOCAL  // MULTREST for the submodules.    k:     DISCRETE;  INST Process1 FROM Process WITH  {    a         AS a;    b         AS b;    processNo AS pNo1;    k         AS k;  }  INST Process2 FROM Process WITH  {    a         AS a;    b         AS b;    processNo AS pNo2;    k         AS k;  }  INST Process3 FROM Process WITH  {    a         AS a;    b         AS b;    processNo AS pNo3;    k         AS k;  }  INST Process4 FROM Process WITH  {    a         AS a;    b         AS b;    processNo AS pNo4;    k         AS k;  }}REACHABILITY CHECK SystemUSE DDM{  VAR    initial, error : REGION;  COMMANDS    initial := INITIALREGION;    error   :=       (    STATE(Process1.Fischer) = critical                      INTERSECT STATE(Process2.Fischer) = critical)               UNION (    STATE(Process1.Fischer) = critical                      INTERSECT STATE(Process3.Fischer) = critical)               UNION (    STATE(Process1.Fischer) = critical                      INTERSECT STATE(Process4.Fischer) = critical)	       UNION (    STATE(Process2.Fischer) = critical                      INTERSECT STATE(Process3.Fischer) = critical)	       UNION (    STATE(Process2.Fischer) = critical                      INTERSECT STATE(Process4.Fischer) = critical)	       UNION (    STATE(Process3.Fischer) = critical                      INTERSECT STATE(Process4.Fischer) = critical);    IF( ISREACHABLE FROM initial TO error FORWARD )     {      PRINT "Mutual exclusion violated";    }    ELSE     {      PRINT "Mutual exclusion satisfied";     } }

⌨️ 快捷键说明

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