- Data structures
- Ownership records, orecs. Fig2
- Shared between threads. All memory addresses hash into an array of orecs. Each memory access during transaction looks up an orec for this memory address.
- Contain: version number or pointer to transaction descriptor that owns it (tries to commit).
- Transaction descriptor
- Created at the start of the transaction. Is private until transaction tries to commit.
- Contains (atomically updated) transaction state: UNDECIDED, READ_CHECK, SUCCESSFUL, or FAILED.
- Logs each memory access in transaction entries: address (a), old value (o), old version (vo), new value (n), new version (vn).
- Version numbers are odd, increasing with every write. Prevent ABA.