Page 43 -
P. 43

30                                            N. Russell and A. ter Hofstede
                              join; however, this has the consequence that the partial join can only be used in a
                              limited range of situations.
                             The Blocking Partial Join is an alternative approach to partial join implemen-
                              tation, which guarantees that each incoming branch receives only a single trig-
                              gering by utilizing the notion of a “blocking region,” which allows only one
                              execution thread to travel on each incoming branch and prevents any additional
                              execution threads from flowing down each branch after until the join has reset.
                              Once the partial join has reset, it is once again re-enabled and can fire when it
                              receives the required threshold of triggers on any combination of its incoming
                              branches. The Blocking Partial Join has the advantage that it can be used in a
                              broader range of situations than the Structured Partial Join such as processes
                              that contain loops.
                             The Canceling Partial Join provides a more expeditious approach to partial
                              join implementation by canceling any remaining execution threads in incoming
                              branches after the join has fired.
                           The AND-join variants of the synchronization patterns deal with synchronizing
                           control-flow in multiple branches within a process. In contrast, the XOR-join vari-
                           ants focus more on merging control-flow from one of the several incoming branches
                           into an outgoing branch.


                           XOR-Join Variants

                           There are two possible operational forms that the XOR-join can take. These are
                           recognized by two distinct patterns:
                             The Simple Merge, which supports the merging of execution threads from mul-
                              tiple incoming branches to the outgoing branch where only one of the incoming
                              branches is active at any given time.
                             The Multiple Merge, which operates in the same way as the Simple Merge but is
                              able to handle multiple concurrent execution threads in the incoming branches,
                              each of which leads to a distinct execution thread in the outgoing branch.



                           OR-Join Variants

                           The OR-join construct is analogous to the AND-join, in that it synchronizes the
                           execution threads in multiple incoming branches and merges them into a single
                           execution thread in an outgoing branch; however, it has the important distinction
                           that not all of the incoming branches may necessarily be active. In general, an OR-
                           join is preceded by a corresponding OR-split earlier in a process that makes the
                           decision about which branches will be activated. There are three distinct patterns
                           that provide alternate approaches to implementing the OR-join:
                             The Structured Synchronizing Merge, which requires that the process fragment
                              between the OR-join and the corresponding preceding OR-split be structured
   38   39   40   41   42   43   44   45   46   47   48