//: Run multiple routines concurrently, without any guarantees on how the //: operations in each are interleaved with each other. :(before "End Globals") size_t Scheduling_interval = 500; //: first, add a deadline to run() //: todo: these changes are ugly and brittle :(replace{} "void run(recipe_number r)") void run(recipe_number r) { routine rr(r); Current_routine = &rr; run_current_routine(Scheduling_interval); } :(replace "void run_current_routine()") void run_current_routine(size_t time_slice) :(replace "while (!Current_routine->completed())" following "void run_current_routine(size_t time_slice)") size_t ninstrs = 0; while (!Current_routine->completed() && ninstrs < time_slice) :(after "Running One Instruction") ninstrs++;