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