InterBase uses its multi-generational architecture to solve all three of those problems. The inspiration for the design was record shadowing, a way to provide a consistent view of data for long read-only transactions without blocking updates. As a performance optimization, back versions of rows were stored in the database, on the same page with the primary record if space existed there. Using the back versions to remove updates by transactions that rollback was a simple step. The real breakthrough was realizing that the versions could also be used for concurrency control.
Most database systems implement concurrency control with locks.
Update locks prevent simultaneous users from modifying a single row. Read locks protect the consistency of a reader's view of data. A single large report could block all updates to the database. Locks were expensive. The lock table must be kept in memory for performance.