Ruby  3.4.0dev (2024-11-05 revision e440268d51fe02b303e3817a7a733a0dac1c5091)
thread_native.h
Go to the documentation of this file.
1 #ifndef RUBY_THREAD_NATIVE_H /*-*-C++-*-vi:se ft=cpp:*/
2 #define RUBY_THREAD_NATIVE_H 1
22 #if defined(_WIN32)
23 #include <windows.h>
24 typedef HANDLE rb_nativethread_id_t;
25 
26 typedef union rb_thread_lock_union {
27  HANDLE mutex;
28  CRITICAL_SECTION crit;
29 } rb_nativethread_lock_t;
30 
31 struct rb_thread_cond_struct {
32  struct cond_event_entry *next;
33  struct cond_event_entry *prev;
34 };
35 
36 typedef struct rb_thread_cond_struct rb_nativethread_cond_t;
37 
38 #elif defined(HAVE_PTHREAD_H)
39 
40 #include <pthread.h>
41 typedef pthread_t rb_nativethread_id_t;
42 typedef pthread_mutex_t rb_nativethread_lock_t;
43 typedef pthread_cond_t rb_nativethread_cond_t;
44 
45 #elif defined(__wasi__) // no-thread platforms
46 
47 typedef struct rb_nativethread_id_t *rb_nativethread_id_t;
48 typedef struct rb_nativethread_lock_t *rb_nativethread_lock_t;
49 typedef struct rb_nativethread_cond_t *rb_nativethread_cond_t;
50 
51 #elif defined(__DOXYGEN__)
52 
54 struct rb_nativethread_id_t;
55 
57 struct rb_nativethread_lock_t;
58 
60 struct rb_nativethread_cond_t;
61 
62 #else
63 #error "unsupported thread type"
64 
65 #endif
66 
68 
69 
74 rb_nativethread_id_t rb_nativethread_self(void);
75 
88 void rb_nativethread_lock_initialize(rb_nativethread_lock_t *lock);
89 
107 void rb_nativethread_lock_destroy(rb_nativethread_lock_t *lock);
108 
115 void rb_nativethread_lock_lock(rb_nativethread_lock_t *lock);
116 
124 void rb_nativethread_lock_unlock(rb_nativethread_lock_t *lock);
125 
127 void rb_native_mutex_lock(rb_nativethread_lock_t *lock);
128 
137 int rb_native_mutex_trylock(rb_nativethread_lock_t *lock);
138 
140 void rb_native_mutex_unlock(rb_nativethread_lock_t *lock);
141 
143 void rb_native_mutex_initialize(rb_nativethread_lock_t *lock);
144 
146 void rb_native_mutex_destroy(rb_nativethread_lock_t *lock);
147 
158 void rb_native_cond_signal(rb_nativethread_cond_t *cond);
159 
166 void rb_native_cond_broadcast(rb_nativethread_cond_t *cond);
167 
177 void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex);
178 
191 void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec);
192 
199 void rb_native_cond_initialize(rb_nativethread_cond_t *cond);
200 
207 void rb_native_cond_destroy(rb_nativethread_cond_t *cond);
208 
210 #endif
#define RBIMPL_SYMBOL_EXPORT_END()
Counterpart of RBIMPL_SYMBOL_EXPORT_BEGIN.
Definition: dllexport.h:74
#define RBIMPL_SYMBOL_EXPORT_BEGIN()
Shortcut macro equivalent to RUBY_SYMBOL_EXPORT_BEGIN extern "C" {.
Definition: dllexport.h:65
void rb_nativethread_lock_lock(rb_nativethread_lock_t *lock)
Blocks until the current thread obtains a lock.
Definition: thread.c:298
rb_nativethread_id_t rb_nativethread_self(void)
Queries the ID of the native thread that is calling this function.
void rb_native_mutex_lock(rb_nativethread_lock_t *lock)
Just another name of rb_nativethread_lock_lock.
void rb_native_cond_initialize(rb_nativethread_cond_t *cond)
Fills the passed condition variable with an initial value.
int rb_native_mutex_trylock(rb_nativethread_lock_t *lock)
Identical to rb_native_mutex_lock(), except it doesn't block in case rb_native_mutex_lock() would.
void rb_native_cond_broadcast(rb_nativethread_cond_t *cond)
Signals a condition variable.
void rb_native_mutex_initialize(rb_nativethread_lock_t *lock)
Just another name of rb_nativethread_lock_initialize.
void rb_native_mutex_unlock(rb_nativethread_lock_t *lock)
Just another name of rb_nativethread_lock_unlock.
void rb_nativethread_lock_unlock(rb_nativethread_lock_t *lock)
Releases a lock.
Definition: thread.c:304
void rb_native_mutex_destroy(rb_nativethread_lock_t *lock)
Just another name of rb_nativethread_lock_destroy.
void rb_native_cond_destroy(rb_nativethread_cond_t *cond)
Destroys the passed condition variable.
void rb_native_cond_signal(rb_nativethread_cond_t *cond)
Signals a condition variable.
void rb_nativethread_lock_initialize(rb_nativethread_lock_t *lock)
Fills the passed lock with an initial value.
Definition: thread.c:286
void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex)
Waits for the passed condition variable to be signalled.
void rb_native_cond_timedwait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex, unsigned long msec)
Identical to rb_native_cond_wait(), except it additionally takes timeout in msec resolution.
void rb_nativethread_lock_destroy(rb_nativethread_lock_t *lock)
Destroys the passed mutex.
Definition: thread.c:292