此FSP如何分隔两个USER路径?

时间:2016-05-08 10:05:18

标签: state-machine

RESOURCE = (acquire->continue->RESOURCE).
USER = (acquire->use->continue->USER).
||RESOURCE_SHARE = (a:USER || b:USER || {a,b}::RESOURCE).

enter image description here

continuea.USER之间的共享操作a.RESOURCE如何确保a.USER路径不会与b.USER路径交织在一起?例如,我LTSA不允许以下跟踪,我不明白为什么不。

a.acquire->b.acquire->a.use->b.use->...

这种混淆是通过将其与以下FSP / LTSA进行比较而得出的。删除这两个流程中的continue操作,我们留下:

RESOURCE = (acquire->RESOURCE).
USER = (acquire->use->USER).
||RESOURCE_SHARE = (a:USER || b:USER || {a,b}::RESOURCE).

enter image description here

这个FSP / LTSA突然允许USER路径交织在一起,因为我们可以执行以下跟踪:

a.acquire->b.acquire->a.use->b.use->...

显然添加继续强制USER路径分开。为什么呢?

来源: 第一个FSP来自“并发”一书。作者:Jeff Magee和Jeff Kramer。

1 个答案:

答案 0 :(得分:0)

我发了一封邮件给老师帮助我。我会用他的话来解释:

  

有三个进程,两个前缀a和b的USER和   {A,B} :: RESOURCE。来自a.USER和b.USER 的动作“获取”合并   来自{a,b}的{a,b} .acquire :: RESOURCE。这也适用于   {A,B}。继续。

     

因此,在第一个状态中,启用了两个可能的跟踪:a.acquire OR b.acquire。假设选择了动作a.acquire。发生转变   和a.USER只启用动作a.use,而   {a,b} :: RESOURCE启用了两个选项:{a,b} .continue。

     

由于a.USER中尚未启用a.continue,因此无法继续执行   在{a,b} :: RESOURCE中。剩下的唯一动作是a.use发生。在里面   与此同时,b。美国仍然处于第一状态,无法运行b.acquire   因为{a,b} :: RESOURCE只启用了{a,b} .continue。

     

在a.use转换之后,a.USER现在已准备好进行共享操作   a.continue。一旦发生这种情况,所有三个过程都会回到原点   开始状态。