static void gvl_init(rb_vm_t *vm) { if (GVL_DEBUG) fprintf(stderr, "gvl init\n"); #if GVL_SIMPLE_LOCK native_mutex_initialize(&vm->gvl.lock); #else native_mutex_initialize(&vm->gvl.lock); vm->gvl.waiting_threads = 0; vm->gvl.waiting_last_thread = 0; vm->gvl.waiting = 0; vm->gvl.acquired = 0; #endif }
static void gvl_init(rb_vm_t *vm) { native_mutex_initialize(&vm->gvl.lock); native_cond_initialize(&vm->gvl.cond, RB_CONDATTR_CLOCK_MONOTONIC); native_cond_initialize(&vm->gvl.switch_cond, RB_CONDATTR_CLOCK_MONOTONIC); native_cond_initialize(&vm->gvl.switch_wait_cond, RB_CONDATTR_CLOCK_MONOTONIC); vm->gvl.acquired = 0; vm->gvl.waiting = 0; vm->gvl.need_yield = 0; }
void Init_native_thread(void) { rb_thread_t *th = GET_THREAD(); pthread_key_create(&ruby_native_thread_key, NULL); th->thread_id = pthread_self(); native_thread_init(th); native_mutex_initialize(&signal_thread_list_lock); posix_signal(SIGVTALRM, null_func); }
static VALUE mutex_alloc(VALUE klass) { VALUE obj; rb_mutex_t *mutex; obj = TypedData_Make_Struct(klass, rb_mutex_t, &mutex_data_type, mutex); native_mutex_initialize(&mutex->lock); native_cond_initialize(&mutex->cond, RB_CONDATTR_CLOCK_MONOTONIC); return obj; }
void Init_native_thread(void) { rb_thread_t *th = GET_THREAD(); pthread_key_create(&ruby_native_thread_key, NULL); th->thread_id = pthread_self(); native_thread_init(th); #ifdef USE_SIGNAL_THREAD_LIST native_mutex_initialize(&signal_thread_list_lock); #endif #ifndef __native_client__ posix_signal(SIGVTALRM, null_func); #endif }
bool lifetime_begin(lifetime_t *lifetime) { voidp_vector_init(&lifetime->callbacks); native_mutex_construct(&lifetime->guard); return native_mutex_initialize(&lifetime->guard); }