The synchronization primitives we have seen so far are not as high-level
as we might want them to be since they require programmers to
explicitly synchronize,
avoid deadlocks,
and abort if necessary.
Moreover,
the high-level constructs such as monitors and path expressions do not give users
of a shared object flexibiility in defining the unit of atomicity.
We will study here a high-level technique,
called concurrency control,
which automatically ensures that concurrently interacting users do not
execute inconsistent commands on a shared object.
A variety of concurrency models
defining different notions of consistency have been proposed.
These models have been developed in the context of
database management systems, operating systems, CAD tools, collaborative
software engineering, and collaboration systems.
We will focus here on the classical database models and the
relatively newer operating system models.