Explanation :
locks are not used; instead, the state of the affected data is recorded at the start of a data
operation. This state is checked again at the end of the operation, before any changes are written. If the
state has not changed, new changes are written. If the state has changed, the new changes are discarded
and the operation fails.