Ruby  3.4.0dev (2024-12-06 revision 892c46283a5ea4179500d951c9d4866c0051f27b)
thread.h
Go to the documentation of this file.
1 #ifndef RUBY_THREAD_H /*-*-C++-*-vi:se ft=cpp:*/
2 #define RUBY_THREAD_H 1
14 #include "ruby/internal/intern/thread.h" /* rb_unblock_function_t */
16 
48 #define RB_NOGVL_INTR_FAIL (0x1)
49 
60 #define RB_NOGVL_UBF_ASYNC_SAFE (0x2)
61 
73 #define RB_NOGVL_OFFLOAD_SAFE (0x4)
74 
78 
104 void *rb_thread_call_with_gvl(void *(*func)(void *), void *data1);
105 
143 void *rb_thread_call_without_gvl(void *(*func)(void *), void *data1,
144  rb_unblock_function_t *ubf, void *data2);
145 
167 void *rb_thread_call_without_gvl2(void *(*func)(void *), void *data1,
168  rb_unblock_function_t *ubf, void *data2);
169 
170 /*
171  * XXX: unstable/unapproved - out-of-tree code should NOT not depend
172  * on this until it hits Ruby 2.6.1
173  */
174 
187 void *rb_nogvl(void *(*func)(void *), void *data1,
188  rb_unblock_function_t *ubf, void *data2,
189  int flags);
190 
198 #define RUBY_CALL_WO_GVL_FLAG_SKIP_CHECK_INTS_AFTER 0x01
199 
204 #define RUBY_CALL_WO_GVL_FLAG_SKIP_CHECK_INTS_
205 
218 
224 #define RUBY_INTERNAL_THREAD_EVENT_STARTED 1 << 0
225 
231 #define RUBY_INTERNAL_THREAD_EVENT_READY 1 << 1
238 #define RUBY_INTERNAL_THREAD_EVENT_RESUMED 1 << 2
245 #define RUBY_INTERNAL_THREAD_EVENT_SUSPENDED 1 << 3
252 #define RUBY_INTERNAL_THREAD_EVENT_EXITED 1 << 4
254 #define RUBY_INTERNAL_THREAD_EVENT_MASK 0xff
257  VALUE thread;
259 
260 typedef void (*rb_internal_thread_event_callback)(rb_event_flag_t event,
261  const rb_internal_thread_event_data_t *event_data,
262  void *user_data);
263 typedef struct rb_internal_thread_event_hook rb_internal_thread_event_hook_t;
264 
280 rb_internal_thread_event_hook_t *rb_internal_thread_add_event_hook(
281  rb_internal_thread_event_callback func, rb_event_flag_t events,
282  void *data);
283 
284 
294  rb_internal_thread_event_hook_t * hook);
295 
296 
297 typedef int rb_internal_thread_specific_key_t;
298 #define RB_INTERNAL_THREAD_SPECIFIC_KEY_MAX 8
320 rb_internal_thread_specific_key_t rb_internal_thread_specific_key_create(void);
321 
327 void *rb_internal_thread_specific_get(VALUE thread_val, rb_internal_thread_specific_key_t key);
328 
334 void rb_internal_thread_specific_set(VALUE thread_val, rb_internal_thread_specific_key_t key, void *data);
335 
337 
338 #endif /* RUBY_THREAD_H */
Tweaking visibility of C variables/functions.
#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
uint32_t rb_event_flag_t
Represents event(s).
Definition: event.h:108
Public APIs related to rb_cThread.
void rb_unblock_function_t(void *)
This is the type of UBFs.
Definition: thread.h:336
void * rb_thread_call_without_gvl2(void *(*func)(void *), void *data1, rb_unblock_function_t *ubf, void *data2)
Identical to rb_thread_call_without_gvl(), except it does not interface with signals etc.
Definition: thread.c:1676
void * rb_internal_thread_specific_get(VALUE thread_val, rb_internal_thread_specific_key_t key)
Get thread and tool specific data.
Definition: thread.c:5944
void rb_internal_thread_specific_set(VALUE thread_val, rb_internal_thread_specific_key_t key, void *data)
Set thread and tool specific data.
Definition: thread.c:5957
rb_internal_thread_specific_key_t rb_internal_thread_specific_key_create(void)
Create a key to store thread specific data.
Definition: thread.c:5916
void * rb_thread_call_with_gvl(void *(*func)(void *), void *data1)
(Re-)acquires the GVL.
Definition: thread.c:1902
rb_internal_thread_event_hook_t * rb_internal_thread_add_event_hook(rb_internal_thread_event_callback func, rb_event_flag_t events, void *data)
Registers a thread event hook function.
bool rb_thread_lock_native_thread(void)
Declare the current Ruby thread should acquire a dedicated native thread on M:N thread scheduler.
void * rb_nogvl(void *(*func)(void *), void *data1, rb_unblock_function_t *ubf, void *data2, int flags)
Identical to rb_thread_call_without_gvl(), except it additionally takes "flags" that change the behav...
Definition: thread.c:1537
void * rb_thread_call_without_gvl(void *(*func)(void *), void *data1, rb_unblock_function_t *ubf, void *data2)
Allows the passed function to run in parallel with other Ruby threads.
bool rb_internal_thread_remove_event_hook(rb_internal_thread_event_hook_t *hook)
Unregister the passed hook.
Defines RBIMPL_ATTR_NONNULL.
#define RBIMPL_ATTR_NONNULL(list)
Wraps (or simulates) __attribute__((nonnull))
Definition: nonnull.h:27
uintptr_t VALUE
Type that represents a Ruby object.
Definition: value.h:40