Model 跳绳和打断诺言的区别到底是什么?

Model 跳绳和打断诺言的区别到底是什么?,model,promela,spin,Model,Promela,Spin,比如说我有一段协议代码 active proctype A(){ do :: !x -> break :: else -> skip od … //more code } 在这种情况下,break和skip到底做了什么?中断中断整个过程A(),这样“更多的代码”就不会到达或只是循环了吗?TLDR: 中断:一条(始终可执行)指令,使执行在包含它的最内部循环的末尾跳转。这种类型的指令对于几乎任何编程语言都是通用的 跳过:无效的空(始终可执

比如说我有一段协议代码

active proctype A(){

   do
      :: !x -> break
      :: else -> skip
   od

   … //more code
}
在这种情况下,
break
skip
到底做了什么?
中断
中断整个过程
A()
,这样“更多的代码”就不会到达或只是循环了吗?

TLDR:

  • 中断:一条(始终可执行)指令,使执行在包含它的最内部循环的末尾跳转。这种类型的指令对于几乎任何编程语言都是通用的

  • 跳过:无效的空(始终可执行)指令。其他语言中有大量的无操作示例,如
    python中的
    pass
    C
    中的code>(和其他),在
    jQuery
    中的
    jQuery.noop()
    ,等等


在这种情况下,只要
x
变为false,那么
break
就会强制循环终止,而
skip
只是一条空指令,用于明确表示在另一种情况下循环一直不做任何事情


名称

L1: do
    :: t1 -> t2
    :: t3 -> break
    :: break
    od;
L2: ...
break-跳到最里面的do循环的末尾

[……]

示例

L1: do
    :: t1 -> t2
    :: t3 -> break
    :: break
    od;
L2: ...
在本例中,控件在执行语句t2后立即到达标签L1。控件还可以在执行语句t3后立即到达标签L2,并且可选地,在一个执行步骤中,控件还可以从标签L1移动到标签L2

名称

skip-一个虚拟的、nil语句的简写

[……]

示例

proctype A()
{
L0:   if
      :: cond1 -> goto L1 /* jump to end */
      :: else -> skip     /* skip redundant */
      fi;
      ...

L1:   skip
}
在本例中,标签L1后面的skip语句是必需的。在上面的选择结构中,在else保护之后使用skip语句是多余的。上述选择可以更简洁地写为:

L0:   if 
      :: cond1 -> goto L1
      :: else
      fi;
因为Promela是一种异步语言,所以在进程执行中引入延迟从来都不需要跳过,也不有效。根据定义,在Promela中,proctype主体中任意两个后续语句执行之间总是存在任意的、不可知的延迟。这种语义符合并发系统设计的黄金法则,即禁止对并发系统中异步进程的相对执行速度进行假设


@AIqbalRaj如果我真的不需要帮助,为什么我要处理这个网站的整个登录过程?那里有信息,但我还不清楚……所以我希望有人能用简单的话向我解释。像你这样的评论对任何人都没有帮助。我也对答案感兴趣。