// Return 0 on succes // Return 1 on failure due to deadlock (extra credit) int lock_acquire(lock_t * l){ enter_critical(); int result = lock_acquire_helper(l); leave_critical(); return result; }
/* TODO: Release lock m and block the thread (enqueued on c). When unblocked, re-acquire m */ void condition_wait(lock_t * m, condition_t * c){ enter_critical(); lock_release_helper(m); block(&c->wait_queue); lock_acquire_helper(m); leave_critical(); }