diff options
author | Benoit Daloze <[email protected]> | 2020-09-05 16:26:24 +1200 |
---|---|---|
committer | Samuel Williams <[email protected]> | 2020-09-14 16:44:09 +1200 |
commit | 178c1b0922dc727897d81d7cfe9c97d5ffa97fd9 (patch) | |
tree | 113600e7e6a196b779bcac7529535597858f78a7 /cont.c | |
parent | 9e0a48c7a31ecd39be0596d0517b9d521ae75282 (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
Notes:
Merged: https://github.com/ruby/ruby/pull/3434
Diffstat (limited to 'cont.c')
-rw-r--r-- | cont.c | 11 |
1 files changed, 11 insertions, 0 deletions
@@ -851,6 +851,12 @@ NOINLINE(static VALUE cont_capture(volatile int *volatile stat)); if (!(th)->ec->tag) rb_raise(rb_eThreadError, "not running thread"); \ } while (0) +rb_thread_t* +rb_fiber_threadptr(const rb_fiber_t *fiber) +{ + return fiber->cont.saved_ec.thread_ptr; +} + static VALUE cont_thread_value(const rb_context_t *cont) { @@ -1146,6 +1152,11 @@ cont_new(VALUE klass) return cont; } +VALUE rb_fiberptr_self(struct rb_fiber_struct *fiber) +{ + return fiber->cont.self; +} + void rb_fiber_init_mjit_cont(struct rb_fiber_struct *fiber) { |