path: root/internal/scheduler.h
diff options
authorBenoit Daloze <>2020-09-05 16:26:24 +1200
committerSamuel Williams <>2020-09-14 16:44:09 +1200
commit178c1b0922dc727897d81d7cfe9c97d5ffa97fd9 (patch)
tree113600e7e6a196b779bcac7529535597858f78a7 /internal/scheduler.h
parent9e0a48c7a31ecd39be0596d0517b9d521ae75282 (diff)
Make Mutex per-Fiber instead of per-Thread
* Enables Mutex to be used as synchronization between multiple Fibers of the same Thread. * With a Fiber scheduler we can yield to another Fiber on contended Mutex#lock instead of blocking the entire thread. * This also makes the behavior of Mutex consistent across CRuby, JRuby and TruffleRuby. * [Feature #16792]
Notes: Merged:
Diffstat (limited to 'internal/scheduler.h')
1 files changed, 3 insertions, 0 deletions
diff --git a/internal/scheduler.h b/internal/scheduler.h
index f5a41af0645..44872e3b10c 100644
--- a/internal/scheduler.h
+++ b/internal/scheduler.h
@@ -17,6 +17,9 @@ VALUE rb_scheduler_timeout(struct timeval *timeout);
VALUE rb_scheduler_kernel_sleep(VALUE scheduler, VALUE duration);
VALUE rb_scheduler_kernel_sleepv(VALUE scheduler, int argc, VALUE * argv);
+VALUE rb_scheduler_mutex_lock(VALUE scheduler, VALUE mutex);
+VALUE rb_scheduler_mutex_unlock(VALUE scheduler, VALUE mutex, VALUE fiber);
VALUE rb_scheduler_io_wait(VALUE scheduler, VALUE io, VALUE events, VALUE timeout);
VALUE rb_scheduler_io_wait_readable(VALUE scheduler, VALUE io);
VALUE rb_scheduler_io_wait_writable(VALUE scheduler, VALUE io);