Ruby: include/ruby/thread_native.h Source File

Ruby 3.3.6p108 (2024-11-05 revision 75015d4c1f6965b5e85e96fb309f1f2129f933c0)

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>
24typedef HANDLE rb_nativethread_id_t;
25
26typedef union rb_thread_lock_union {
27 HANDLE mutex;
28 CRITICAL_SECTION crit;
29} rb_nativethread_lock_t;
30
31struct rb_thread_cond_struct {
32 struct cond_event_entry *next;
33 struct cond_event_entry *prev;
34};
35
36typedef struct rb_thread_cond_struct rb_nativethread_cond_t;
37
38#elif defined(HAVE_PTHREAD_H)
39
40#include <pthread.h>
41typedef pthread_t rb_nativethread_id_t;
42typedef pthread_mutex_t rb_nativethread_lock_t;
43typedef pthread_cond_t rb_nativethread_cond_t;
44
45#elif defined(__wasi__) // no-thread platforms
46
47typedef struct rb_nativethread_id_t *rb_nativethread_id_t;
48typedef struct rb_nativethread_lock_t *rb_nativethread_lock_t;
49typedef struct rb_nativethread_cond_t *rb_nativethread_cond_t;
50
51#elif defined(__DOXYGEN__)
52
54struct rb_nativethread_id_t;
55
57struct rb_nativethread_lock_t;
58
60struct rb_nativethread_cond_t;
61
62#else
63#error "unsupported thread type"
64
65#endif
66
67 RBIMPL_SYMBOL_EXPORT_BEGIN()
68
69
74rb_nativethread_id_t rb_nativethread_self(void);
75
88void rb_nativethread_lock_initialize(rb_nativethread_lock_t *lock);
89
107void rb_nativethread_lock_destroy(rb_nativethread_lock_t *lock);
108
115void rb_nativethread_lock_lock(rb_nativethread_lock_t *lock);
116
124void 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
209 RBIMPL_SYMBOL_EXPORT_END()
210#endif
RBIMPL_SYMBOL_EXPORT_END
#define RBIMPL_SYMBOL_EXPORT_END()
Counterpart of RBIMPL_SYMBOL_EXPORT_BEGIN.
Definition dllexport.h:74
RBIMPL_SYMBOL_EXPORT_BEGIN
#define RBIMPL_SYMBOL_EXPORT_BEGIN()
Shortcut macro equivalent to RUBY_SYMBOL_EXPORT_BEGIN extern "C" {.
Definition dllexport.h:65
rb_nativethread_lock_lock
void rb_nativethread_lock_lock(rb_nativethread_lock_t *lock)
Blocks until the current thread obtains a lock.
Definition thread.c:298
rb_nativethread_self
rb_nativethread_id_t rb_nativethread_self(void)
Queries the ID of the native thread that is calling this function.
rb_native_mutex_lock
void rb_native_mutex_lock(rb_nativethread_lock_t *lock)
Just another name of rb_nativethread_lock_lock.
rb_native_cond_initialize
void rb_native_cond_initialize(rb_nativethread_cond_t *cond)
Fills the passed condition variable with an initial value.
rb_native_mutex_trylock
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.
rb_native_cond_broadcast
void rb_native_cond_broadcast(rb_nativethread_cond_t *cond)
Signals a condition variable.
rb_native_mutex_initialize
void rb_native_mutex_initialize(rb_nativethread_lock_t *lock)
Just another name of rb_nativethread_lock_initialize.
rb_native_mutex_unlock
void rb_native_mutex_unlock(rb_nativethread_lock_t *lock)
Just another name of rb_nativethread_lock_unlock.
rb_nativethread_lock_unlock
void rb_nativethread_lock_unlock(rb_nativethread_lock_t *lock)
Releases a lock.
Definition thread.c:304
rb_native_mutex_destroy
void rb_native_mutex_destroy(rb_nativethread_lock_t *lock)
Just another name of rb_nativethread_lock_destroy.
rb_native_cond_destroy
void rb_native_cond_destroy(rb_nativethread_cond_t *cond)
Destroys the passed condition variable.
rb_native_cond_signal
void rb_native_cond_signal(rb_nativethread_cond_t *cond)
Signals a condition variable.
rb_nativethread_lock_initialize
void rb_nativethread_lock_initialize(rb_nativethread_lock_t *lock)
Fills the passed lock with an initial value.
Definition thread.c:286
rb_native_cond_wait
void rb_native_cond_wait(rb_nativethread_cond_t *cond, rb_nativethread_lock_t *mutex)
Waits for the passed condition variable to be signalled.
rb_native_cond_timedwait
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.
rb_nativethread_lock_destroy
void rb_nativethread_lock_destroy(rb_nativethread_lock_t *lock)
Destroys the passed mutex.
Definition thread.c:292