-- Mar 9 In-Class Exercise
Simulation with Rishabh Pandey and Abhishek Vaid
Ts(i) = Timestep i
Ts(1): P[0] scans/locks C[0]
Ts(2): P[0] reads (t[0], R[0]) = (0, 0)
Ts(3): P[0] reaches case e (T[0] = t[0], R[0] = 0, B[0] = 0); P[1] scans/locks C[1]
Ts(4): P[0] sets T[0] = 1, t[0] = 1, B[0] = 0 (by random assignment); P[1] reads (t[1], R[1]) = (0, 0)
Ts(5): P[0] writes (1, 0) into C[0]; P[1] reaches case e (T[1] = t[1], R[1] = 0, B[1] = 0)
Ts(6): P[0] releases lock on C[0]; P[1] sets T[1] = 1, t[1] = 1, B[1] = 1 (by random assignment)
Ts(7): P[0] waits on C[1]; P[1] writes (1,1) into C[1]
Ts(8): P[0] waits on C[1]; P[1] releases lock on C[1]
Ts(9): P[0] waits on C[1]; P[1] scans/locks C[0]
Ts(10): P[0] scans/locks C[1]; P[1] reads (t[1], R[1]) = (1, 0)
Ts(11): P[0] reads (t[0], R[0]) = (1, 1); P[1] reaches case d (T[1] = t[1], R[1] = 0, B[1] = 1)
Ts(12): P[0] reaches case e (T[0] = t[0], R[0] = 1, B[0] = 0); P[1] writes (1, #) into C[0]
Ts(13): P[0] sets T[0] = 2, t[0] = 2, B[0] = 0 (by random assignment); P[1] releases lock on C[0]
Ts(14): P[0] writes (2, 0) into C[1]; P[1] halts
Ts(15): P[0] releases lock on C[1]
Ts(16): P[0] scans/locks C[0]
Ts(17): P[0] reads (t[0], R[0]) = (1, #)
Ts(18): P[0] reaches case a (R[0] = #)
Ts(19): P[0] releases lock on C[0]
Ts(20): P[0] halts
Simulation with Rishabh Pandey and Abhishek Vaid
Ts(i) = Timestep i
Ts(1): P[0] scans/locks C[0]
Ts(2): P[0] reads (t[0], R[0]) = (0, 0)
Ts(3): P[0] reaches case e (T[0] = t[0], R[0] = 0, B[0] = 0); P[1] scans/locks C[1]
Ts(4): P[0] sets T[0] = 1, t[0] = 1, B[0] = 0 (by random assignment); P[1] reads (t[1], R[1]) = (0, 0)
Ts(5): P[0] writes (1, 0) into C[0]; P[1] reaches case e (T[1] = t[1], R[1] = 0, B[1] = 0)
Ts(6): P[0] releases lock on C[0]; P[1] sets T[1] = 1, t[1] = 1, B[1] = 1 (by random assignment)
Ts(7): P[0] waits on C[1]; P[1] writes (1,1) into C[1]
Ts(8): P[0] waits on C[1]; P[1] releases lock on C[1]
Ts(9): P[0] waits on C[1]; P[1] scans/locks C[0]
Ts(10): P[0] scans/locks C[1]; P[1] reads (t[1], R[1]) = (1, 0)
Ts(11): P[0] reads (t[0], R[0]) = (1, 1); P[1] reaches case d (T[1] = t[1], R[1] = 0, B[1] = 1)
Ts(12): P[0] reaches case e (T[0] = t[0], R[0] = 1, B[0] = 0); P[1] writes (1, #) into C[0]
Ts(13): P[0] sets T[0] = 2, t[0] = 2, B[0] = 0 (by random assignment); P[1] releases lock on C[0]
Ts(14): P[0] writes (2, 0) into C[1]; P[1] halts
Ts(15): P[0] releases lock on C[1]
Ts(16): P[0] scans/locks C[0]
Ts(17): P[0] reads (t[0], R[0]) = (1, #)
Ts(18): P[0] reaches case a (R[0] = #)
Ts(19): P[0] releases lock on C[0]
Ts(20): P[0] halts