A way to avoid the problem of concurrently executing transactions is to
execute transactions serially—that is, one after the other. However, concurrent
execution of transactions provides significant performance benefits, as
we shall see in Section 14.5. Other solutions have therefore been developed;
they allow multiple transactions to execute concurrently.