blob: 08be7821b7e004f53c96f14b6039d4c47edafd89 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
//: 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++;
|