A dependency solver for scheduling access to a shared resource