不确定状态机理解

问题描述 投票:0回答:1

我正在尝试为我的iOS项目构建一个DSL。 为此,我计划以Semantic Model的形式建造一个State Machine。 (术语来自Fowler关于DSL的书)。 主要思想:State Machine被编码为它们之间的statestransitions的集合,然后可以编写一些单元测试来检查some_action上的some_state1是否将系统导向some_state2。 问题是我的应用程序有很多后台线程,因此在给定时刻可以在State Machine中激活多个状态。 我已经读过这样的状态机是Nondeterministic finite automaton,浏览维基页面,但这对我来说太理论化了。

这是一个示例状态机:

s8只有在收到t7t8时才能被激活,这意味着它应该“等待”。

enter image description here

问题: 1.状态机中有没有类似"wait"的东西? 也许,这不是NFA,而是两台国家机器?我是否应该关心如何命名这种语义模型? 3.是否可以使用某个后台线程实现s8,后台线程接受来自s4s7的通知,并且只有当它们都发送通知时才会激活(这意味着单元测试在达到超时时失败,然后该超时应该在模型的某处提到)?

dsl state-machine finite-automata non-deterministic
1个回答
1
投票

在分层状态机中查看orthogonal regions,这应该可以满足您的需求。

创建一个具有两个子区域的新状态:第一个区域包含s1,s2,s3,s4和一个新的最终状态(t8的目标);第二个区域包含s5,s6,s7和一个新的最终状态(t7的目标)。然后添加从新状态到s8的新转换。

只有当两个区域都处于最终状态时,才能遍历新的过渡。

© www.soinside.com 2019 - 2024. All rights reserved.