Two kinds of enabling conditions are generally needed to perform any action:
External. . An object receives a message requesting that an action be performed.
Internal. . The object is in an appropriate state to perform the action.
As a non-programming example, suppose you are asked to write down a telephone message. To do this, you need to have a pencil and paper (or some other recording device).
Exclusion techniques are mainly concerned with maintaining invariants. State-dependent concurrency control imposes additional concerns surrounding preconditions and postconditions. Actions may have state-based preconditions that need not always hold when clients invoke methods on the host object. Conversely, actions may have postconditions ...