transaction concurrency
transaction concurrency
abortTransaction(trans);
aborts the transaction.
Locks
TransactionT: TransactionU:
balance = b.getBalance() balance = b.getBalance()
b.setBalance(bal*1.1) b.setBalance(bal*1.1)
a.withdraw(bal/10) c.withdraw(bal/10)
Operations Locks Operations Locks
openTransaction
bal = b.getBalance()
lock B
b.setBalance(bal*1.1) openTransaction
a.withdraw(bal/10) Lock A bal = b.getBalance()
waits forT’s
lock onB
closeTransaction unlockA, B
lock B
b.setBalance(bal*1.1)
c.withdraw(bal/10) lock C
closeTransaction unlockB, C
Figure 13.15
Lock compatibility
TransactionT: TransactionU:
a.getBalance() a.getBalance()
a.setBalance(balance + 10) a.setBalance(balance + 20)
balance = a.getBalance()$100
a.setBalance(balance + 10)
$110
balance = a.getBalance()$110
a.setBalance(balance + 20)
$130
commit transaction
abort transaction
Tv Ti Rule
write read 1.mustTi not read objects written
Tv by
read write 2.must
Tv not read objects written
Ti by
write write 3.
mustTinot write objects written
Tv and
by
Tnot
v must
write objects written
Ti by
Rule Tc Ti
1. write read Tcmust not
write
an object that has been
read by Tany
i whereTi >Tc
this requires≥ the
that
Tcmaximum read timestamp of the object.