簡體   English   中英

具有依賴性的並行進程

[英]Parallel processes with dependency

有兩個並行的過程。 每個過程有兩個步驟。 第一個過程的第二步總是在第一步之后執行。 第二過程的第二步僅在特定條件下進行。

活動圖: 在此處輸入圖像描述

如何反映一個附加條件:要完成第二個過程的第二步,必須完成第一個過程的第一步。

我管理: 在此處輸入圖像描述

缺陷:

  1. fork 和 join 之間不匹配
  2. 如果不滿足第二個過程的條件,則令牌在加入之前“掛起”

再次查看您的解決方案后,我認為您看到了問題,但實際上並沒有。 您擔心掛起的令牌,但在這種情況下這不是問題。 如果繞過 P22,來自 P11 的令牌將 go 直接向下發送到加入節點。 P11 和 P12 也將毫無問題地向下傳遞它們的令牌,從而創建卡在中間右連接中的幽靈令牌。 由於較低的連接現在有兩個令牌,它將繼續到活動終止的結尾。 屆時,任何自由運行的令牌(甚至活動操作)也將終止。 都好。

我留下我以前的答案以獲得進一步的靈感。 但基本上它們都將以類似的方式實現,因為它們代表一個網關。


原答案

我想使用事件是最好的方法:

在此處輸入圖像描述

這樣, D只能在收到A完成后發送的事件時開始(和完成)。

另一種方法是使用 object 存儲動作A的最終確定並由D讀取。

在此處輸入圖像描述

請注意,通過a ready的對角線連接器是ObjectFlow s,UML 默認情況下不會光學區分(與 SysML 不同)。

UML 2.5 的第 374 頁指出

Object 令牌通過 ObjectFlow,通過它們的值通過 Activity 攜帶數據,或者不攜帶數據(null 令牌)。 null 令牌仍然可以沿 ObjectFlow 傳遞並像任何其他令牌一樣使用。 例如,一個 Action 可以 output a null 標記來明確指示它沒有產生可選值,下游 DecisionNode(參見子條款 15.3)可以對此進行測試並相應地分支。

所以你可以看到它是一個持有令牌的緩沖區,不需要存儲真正的數據。 基本上這與事件相同。 在實現方面,您可以使用信號量或 stream 來實現這一點,但當然在這個級別上您不會太在意這些細節。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM