阻塞系统是否在状态机中调用呼叫事件

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

在UML状态机中状态之间的转换时,您可以拥有触发器,防护和效果。

如果我进行阻塞系统调用(例如Posix系统上的select()或Raspberry Pi上的wait_for_edge())这是一个调用事件,因为状态机被阻塞而我无法继续此操作?

我可以通过这种方式建模这种状态机吗?还是我必须使用不同的机制?

谢谢

uml system-calls state-machine
2个回答
0
投票

如果您有阻止呼叫,则状态保持不变。您将在州内显示<<do>>操作等调用。

enter image description here


0
投票

状态机内的阻塞调用违反了状态机内事件处理的普遍假设的运行到完成语义。这是因为取消阻塞(从阻塞调用返回)是将事件传递给状态机的另一种方法。问题是当状态机已处于处理原始事件的中间时,此“后门”事件到来。此外,没有明确的方法在状态机图中显示这种“非阻塞”事件。由于这些原因,任何阻塞调用(甚至不是内联延迟())都应该避免在状态机内部,或者在任何真正的事件驱动系统内部。事件应严格通过事件循环传递。这样的事件循环可以阻塞等待事件,但这是在任何状态机之外。

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