1/********************************************************************** 2 3 thread_pthread.h - 4 5 $Author: nobu $ 6 7 Copyright (C) 2004-2007 Koichi Sasada 8 9**********************************************************************/ 10 11#ifndef RUBY_THREAD_PTHREAD_H 12#define RUBY_THREAD_PTHREAD_H 13 14#include <pthread.h> 15#ifdef HAVE_PTHREAD_NP_H 16#include <pthread_np.h> 17#endif 18typedef pthread_t rb_thread_id_t; 19typedef pthread_mutex_t rb_thread_lock_t; 20 21typedef struct rb_thread_cond_struct { 22 pthread_cond_t cond; 23#ifdef HAVE_CLOCKID_T 24 clockid_t clockid; 25#endif 26} rb_thread_cond_t; 27 28typedef struct native_thread_data_struct { 29 void *signal_thread_list; 30 rb_thread_cond_t sleep_cond; 31} native_thread_data_t; 32 33#include <semaphore.h> 34 35#undef except 36#undef try 37#undef leave 38#undef finally 39 40typedef struct rb_global_vm_lock_struct { 41 /* fast path */ 42 unsigned long acquired; 43 pthread_mutex_t lock; 44 45 /* slow path */ 46 volatile unsigned long waiting; 47 rb_thread_cond_t cond; 48 49 /* yield */ 50 rb_thread_cond_t switch_cond; 51 rb_thread_cond_t switch_wait_cond; 52 int need_yield; 53 int wait_yield; 54} rb_global_vm_lock_t; 55 56#endif /* RUBY_THREAD_PTHREAD_H */ 57