Contended Commit
- Helping
- The thread that conflicts with another transaction tries to help the other one
- If the other is not SUCCESSFUL yet, abort it
- Otherwise, help update orecs
- It does it by going through the other transaction's descriptor and doing the writes
- But it cannot release ownership of orecs because the first thread will still try to use them
- It builds a combined descriptor for both trying to linearize the two transactions
- If the records conflict, this transaction aborts
- Otherwise it steals the transaction record
- The other transaction finds out that the record is stolen and it helps the first one
- This scheme requires adding a counter to orecs and doing double-word CAS
- Another option is to go through the operating system (acquiring a suspension lock)