In the framework of an applicative programming language and demand-driven data-flow model, a high level method for expressing synchronization of resources is presented. This mechanism, given by ``synchronization expression``, encapsulates the usage of resources; resources can be accessed only through the operations controlled by them. A resource is considered as a data object, implementation of which is separated from the implementation of synchronization rule. This paper presents the entire structure and the operational semantics of synchronization expressions, and shows how they can be implemented. Also, it is shown that synchronization rules can be specified clearly and understood easily by means of synchronization expression. The mechanism is illustrated by the solutions of a variety of synchronization problems; how the synchronization expressions are used to specify synchronization constraints.