【问题标题】:Pass by-reference in Promela在 Promela 中通过引用传递
【发布时间】:2015-01-15 11:03:23
【问题描述】:

在我的设计中,我有 N 个全局变量和一个方法,该方法将一些提到的参数作为参数,具体取决于状态。

我可以通过引用将全局变量作为参数传递吗?

This paper 在结论部分明确表示

" Spin 执行的特殊形式的按引用调用参数传递 不支持”

还有其他方法可以做到这一点吗? (即传递变量名)

结构如下

bit varA = 1;
bit varB = 1;
bit varC = 1;

proctype AProcess(bit AVar){
  /* enter_crit_section */

  /* change global varN */

  /* exit_crit_section */
}

init {
  run AProcess(varA)
  run AProcess(varB)
  run AProcess(varC)
}

附言 我无法使用,例如:

mtype = { A, B, C }
...
proctype AProcess(bit AVar; mtype VAR)
...
run AProcess(varA, A)

然后检查传递了哪个变量,因为AProcess 无法知道其他变量的存在

【问题讨论】:

    标签: spin promela


    【解决方案1】:

    将变量放入数组中,然后传递数组索引。比如:

    // A type to identify VARs; we pass these values to simulate 'by reference'
    #define var_id byte
    
    // A VAR 
    typedef var_struct
    {
       bit val;  // The var's value
    };
    
    #define VAR_COUNT 3
    
    // allocate the VARs
    var_struct var_array [VAR_COUNT];
    
    // Access the value for VAR (based on var_t
    #define VAR_VAL(id)   var_array[(id)].val
    

    【讨论】:

    • 我认为您的代码中有一些额外的信息。但我有个主意。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 2011-01-14
    • 2019-07-03
    • 2011-01-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多