tur/scheduler_mt
multi-threaded work-stealing scheduler for parallel fibers.
Since: Phase T23
scheduler-mt-new
(scheduler-mt-new [n_threads :int] :ptr<void>)
create a new multi-threaded work-stealing scheduler.
| n_threads | number of OS worker threads to spawn |
ptr<void> -- the newly allocated scheduler; aborts on allocation failure
(scheduler-mt-new 4) ; => sched-ptr
Since: Phase T23
scheduler-mt-free
(scheduler-mt-free [sched :ptr<void>] :nil)
free a multi-threaded scheduler after all threads have finished.
| sched | scheduler pointer returned by scheduler-mt-new |
(scheduler-mt-free sched)
Since: Phase T23
scheduler-mt-spawn
(scheduler-mt-spawn [sched :ptr<void> fiber :ptr<void>] :nil)
add a fiber to the multi-threaded scheduler's work queue.
| sched | scheduler pointer returned by scheduler-mt-new | |
| fiber | fiber pointer to enqueue for execution |
(scheduler-mt-spawn sched my-fiber)
Since: Phase T23
scheduler-mt-run
(scheduler-mt-run [sched :ptr<void>] :nil)
run the multi-threaded scheduler on the calling thread.
| sched | scheduler pointer returned by scheduler-mt-new |
(scheduler-mt-run sched)
Since: Phase T23
scheduler-mt-thread-id
(scheduler-mt-thread-id :int)
return the unique integer ID of the current OS thread.
int -- a non-negative thread ID unique within the scheduler
(scheduler-mt-thread-id) ; => non-deterministic thread ID
Since: Phase T23
scheduler-mt-set-current
(scheduler-mt-set-current [sched :ptr<void>] :nil)
set the active scheduler for the current thread.
| sched | scheduler pointer to install as the current thread's scheduler |
(scheduler-mt-set-current sched)
Since: Phase T23
scheduler-mt-current
(scheduler-mt-current :ptr<void>)
return the scheduler currently associated with this thread.
ptr<void> -- the active scheduler for this thread, or nil if none set
(scheduler-mt-current) ; => sched-ptr
Since: Phase T23
scheduler-mt-yield
(scheduler-mt-yield :nil)
yield the current fiber so other fibers may be scheduled.
(scheduler-mt-yield)
Since: Phase T23
scheduler-mt-park
(scheduler-mt-park :nil)
park the current fiber until another fiber calls scheduler-mt-unpark.
(scheduler-mt-park)
Since: Phase T23
scheduler-mt-unpark
(scheduler-mt-unpark [fiber :ptr<void>] :nil)
unpark a previously parked fiber, making it eligible to run.
| fiber | fiber pointer that was previously parked via scheduler-mt-park |
(scheduler-mt-unpark other-fiber)
Since: Phase T23