about summary refs log tree commit diff stats
path: root/cpp/038scheduler
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/038scheduler')
-rw-r--r--cpp/038scheduler19
1 files changed, 19 insertions, 0 deletions
diff --git a/cpp/038scheduler b/cpp/038scheduler
new file mode 100644
index 00000000..3196795c
--- /dev/null
+++ b/cpp/038scheduler
@@ -0,0 +1,19 @@
+//: 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) {
+  run(routine(r), Scheduling_interval);
+}
+:(replace "void run(routine rr)")
+void run(routine rr, size_t time_slice)
+:(replace "while (!done(rr))" following "void run(routine rr, size_t time_slice)")
+size_t ninstrs = 0;
+while (!done(rr) && ninstrs < time_slice)
+:(after "Running One Instruction")
+ninstrs++;