コード例 #1
0
ファイル: fastthread.c プロジェクト: genki/fastthread
static VALUE
rb_mutex_exclusive_unlock_inner(Mutex *mutex)
{
    VALUE waking;
    waking = unlock_mutex_inner(mutex);
    rb_yield(Qundef);
    return waking;
}
コード例 #2
0
ファイル: fastthread.c プロジェクト: genki/fastthread
static void
wait_condvar(ConditionVariable *condvar, Mutex *mutex)
{
    //rb_thread_critical = 1;
    if (rb_thread_current() != mutex->owner) {
        //rb_thread_critical = 0;
        rb_raise(private_eThreadError, "not owner of the synchronization mutex");
    }
    unlock_mutex_inner(mutex);
    rb_ensure(wait_list, (VALUE)&condvar->waiting, lock_mutex, (VALUE)mutex);
}
コード例 #3
0
ファイル: thread.c プロジェクト: asimoov/emscripted-ruby
static void
wait_condvar(ConditionVariable *condvar, Mutex *mutex)
{
    VALUE waking;

    rb_thread_critical = 1;
    if (rb_thread_current() != mutex->owner) {
        rb_thread_critical = 0;
        rb_raise(rb_eThreadError, "not owner of the synchronization mutex");
    }
    waking = unlock_mutex_inner(mutex);
    if (RTEST(waking)) {
	wake_thread(waking);
    }
    rb_ensure(wait_list, (VALUE)&condvar->waiting, lock_mutex, (VALUE)mutex);
}