By default, reads do not acquire a lock which makes normal reads faster.
Read locks can optionally be acquired via the withReadLock method. For
example, if tx
is a transaction then tx.withReadLock().get(row,col)
reads with a lock.
- Create transaction tx1
- Using tx1 set kerbalnaut0001:stat:weight to 90
- Using tx1 set kerbalnaut0002:stat:weight to 70
- Using tx1 set kerbalnaut0003:stat:weight to 80
- Commit tx1
- Create transaction tx2
- Create transaction tx3
- Create transaction tx4
- Using tx2 set flight0001:stat:weight to the read locked values of kerbalnaut0001:stat:weight plus kerbalnaut0003:stat:weight
- Using tx3 set flight0002:stat:weight to the read locked values of kerbalnaut0001:stat:weight plus kerbalnaut0002:stat:weight
- Using tx4 set kerbalnaut0001:stat:weight to 95
- Commit tx2
- Commit tx3
- Commit tx4
Both tx2 and tx3 get a read lock on kerbalnaut0001:stat:weight without
interfering with each other. The read locks prevent tx4 from committing.
Try reordering the commits for tx2, tx3, and tx4.