Page 4: Schedules

A schedule shows the order in which operations from different transactions are executed.

Types of Schedules

Serial Schedules

Transactions run one after another (no mixing) Example: T₁ completely, then T₂ completely

T₁: Transfer ₹50 from A to B
T₂: Transfer 10% of A to B

Schedule 1 (T₁ → T₂):

  • Initial: A = 1000, B = 2000

  • After T₁: A = 950, B = 2050

  • After T₂: A = 855, B = 2145

  • Total preserved: 855 + 2145 = 3000 ✓

Concurrent Schedules

Operations from different transactions are mixed

Good Concurrent Schedule (equivalent to serial):

T₁: read(A)
T₁: A := A - 50  
T₁: write(A)
T₂: read(A)           ← reads value after T₁ updated A
T₂: temp := A * 0.1
T₂: A := A - temp
T₂: write(A)
T₁: read(B)
T₁: B := B + 50
T₁: write(B)
T₂: read(B)
T₂: B := B + temp  
T₂: write(B)

Result: Same as Schedule 1 above ✓

Bad Concurrent Schedule:

T₁: read(A)           A = 1000
T₁: A := A - 50       A = 950 in memory
T₂: read(A)           A = 1000 (reads old value!)
T₂: temp := A * 0.1   temp = 100
T₁: write(A)          A = 950 on disk
T₂: A := A - temp     A = 900 in T₂'s memory
T₂: write(A)          A = 900 on disk (overwrites T₁!)
...

Result: Money created out of nowhere! ✗

Updated on