The problem of synchronization can be formulated in terms of rules constraining the occupancy of regions in different processes, where a region is a block of code whose execution may require synchronization. In this region synchronization problem, the region occupancy rules (or the synchronization policy) can be specified using a global invariant. The task of a region synchronization algorithm is to constrain the region entry and exit of processes in a manner that satisfies the global invariant. This paper proposes efficient algorithms for region synchronization in message passing systems. In particular, we propose extensions of two existing mutual exclusion algorithms to solve the region synchronization problem. We show that our algorithms are message efficient and satisfy the property of absence of unnecessary synchronization. We show that many existing synchronization problems such as group mutual exclusion, readers/writers, committee coordination, and barrier can be specified as instances of the region synchronization problem, and hence our algorithms can be used to solve a large class of problems.