The Problem with Concurrent Execution
Concurrent processes (or threads) often need access to shared data and shared resources.
If there is no controlled access to shared data, it is possible to obtain an inconsistent view of this data.
Maintaining data consistency requires mechanisms to ensure the orderly execution of cooperating processes.