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
   39   40   41   42   43   44   45   46   47   48   49