BeginTransaction();
int FromOldBalance = GetBalance(FromAccount);
int ToOldBalance = GetBalance(ToAccount);
SetBalance(FromAccount, FromOldBalance - 100);
SetBalance(ToAccount, ToOldBalance + 100);
EndTransaction();
(for consistency)
simple idea: do one transaction at a time
more efficient(?) idea:
(also other strategies with different flexibility/efficiency)
everytime something read/written: acquire associated lock
on end transaction: release lock
if deadlock: undo everything, go back to BeginTransaction(), retry
on read: copy version # for value read
on write: record value to be written, but don’t write yet
on end transaction: