Page 44 -
P. 44
2 The Language: Rationale and Fundamentals 31
in format (i.e., has “balanced” splits and joins). Once the preceding OR-split
has fired, it provides information to the OR-join to indicate how many incom-
ing branches are active and will require synchronization. The restriction of the
pattern to a structured process simplifies the implementation of the OR-join;
however, this has the consequence that it can only be used in a limited range
of situations.
The Local Synchronizing Merge, which requires that the OR-join be able to make
a decision about when it should fire based on information available locally to it
(a notion that is often termed “local semantics”). The approach allows the OR-
join to operate in a wider range of processes, although it cannot be utilized in
scenarios involving unstructured loops.
The General Synchronizing Merge, where the OR-join can use any information
available about the current process state, including an analysis of possible future
states, to determine whether it should fire based on currently enabled branches or
whether it should wait for any additional branches to complete before firing.
Figure 2.4a–c illustrates the main differences between these OR-join variants. In
Fig. 2.4a, the structured nature of the process in which the Structured Synchroniz-
ing Merge operates is evident, as are the “bypass” branches corresponding to each
branch. Figure 2.4b illustrates the Local Synchronizing Merge, which is able to func-
tion in unstructured processes, including those involving loops, but relies on the
use of local semantics and cannot be used on a general basis unlike the General
number of
enabled branches
multi- sync
choice merge
multi- sync
choice merge
exclusive
merge
choice
merge
multi- sync
choice merge
exclusive
merge
choice
Fig. 2.4 Synchronizing Merge pattern examples