A synchronization construct orders the completion of code executed by different threads. This ordering is imposed by synchronizing flush operations that are executed as part of the region that corresponds to the construct.
Synchronization through the use of synchronizing flush operations and atomic operations is described in Section 1.4.4 on page 59 and Section 1.4.6 on page 71. Section 2.17.8.1 on page 684 defines the behavior of synchronizing flush operations that are implied at various other locations in an OpenMP program.