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