void thr1() { q0: acquire_thread_id(1, m); // m=0 /\ m'=1 q1: x = 0; q2: x = 1; q3: assert(x>=1); q4: release(m); }
void thr2() { acquire_thread_id(2, m); // m=0 /\ m'=2 x = 0; x = 1; assert(x>=1); release(m); }
void thr1() { acquire_thread_id(1, m); // m=0 /\ m'=1 x = 0; x = 1; assert(x>=1); release(m); }
inline int down_interruptible(int tid) { acquire_thread_id(tid, lock); return 0; // lock is held }