int main() { plan(7); memory_init(); fiber_init(fiber_c_invoke); struct fiber *f = fiber_new("main", main_f); fiber_wakeup(f); ev_run(loop(), 0); fiber_free(); memory_free(); return check_plan(); }
static void fiber_cond_basic() { struct fiber_cond *cond = fiber_cond_new(); int check = 0; struct fiber *f1 = fiber_new("f1", fiber_cond_basic_f); assert(f1 != NULL); fiber_start(f1, cond, &check); fiber_set_joinable(f1, true); struct fiber *f2 = fiber_new("f2", fiber_cond_basic_f); assert(f2 != NULL); fiber_start(f2, cond, &check); fiber_set_joinable(f2, true); /* check timeout */ fiber_sleep(0.0); fiber_sleep(0.0); /* Wake up the first fiber */ fiber_cond_signal(cond); fiber_sleep(0.0); /* Wake ip the second fiber */ fiber_cond_signal(cond); fiber_sleep(0.0); /* Check that fiber scheduling is fair */ is(check, 2, "order"); fiber_cond_broadcast(cond); fiber_sleep(0.0); fiber_join(f1); fiber_join(f2); fiber_cond_delete(cond); }
static VALUE rb_fiber_s_new(VALUE self) { return fiber_new(self, rb_block_proc()); }
VALUE rb_fiber_new(VALUE (*func)(ANYARGS), VALUE obj) { return fiber_new(rb_cFiber, rb_proc_new(func, obj)); }