1#ifndef RUBY_THREAD_SCHED_H
2#define RUBY_THREAD_SCHED_H
31enum thread_sched_wait_result {
32 thread_sched_wait_event,
33 thread_sched_wait_timeout,
34 thread_sched_wait_unavailable,
35 thread_sched_wait_interrupted,
40 enum thread_sched_waiting_flag {
41 thread_sched_waiting_none = 0x00,
42 thread_sched_waiting_timeout = 0x01,
43 thread_sched_waiting_io_read = 0x02,
44 thread_sched_waiting_io_write = 0x08,
45 thread_sched_waiting_io_force = 0x40,
50#ifdef MY_RUBY_BUILD_MAY_TIME_TRAVEL
55 uint32_t event_serial;
61 struct ccan_list_node node;
69 struct ccan_list_node fd_node;
75 struct ccan_list_head waiters;
92 struct ccan_list_node ubf;
96 struct ccan_list_node readyq;
104 uint32_t event_serial;
108 uint32_t wake_pending_cnt;
117 size_t context_stack_size;
125 rb_nativethread_id_t thread_id;
127#ifdef RB_THREAD_T_HAS_NATIVE_ID
134 HANDLE interrupt_event;
144 rb_nativethread_lock_t running_th_lock;
146 struct ccan_list_node snts_node;
148 struct ccan_list_node running_dnts_node;
151 uint32_t barrier_counted_serial;
154 rb_nativethread_cond_t readyq;
156#ifdef USE_SIGALTSTACK
182 rb_nativethread_lock_t lock_;
191 int runnable_hot_th_waiting;
194 bool enable_mn_threads;
196 struct ccan_list_head readyq;
203 struct ccan_list_node grq_node;
204 struct ccan_list_node timeslice_node;
207struct rb_thread_context;
215#define th_has_coroutine(th) ((th)->sched.context != NULL)
222 rb_nativethread_lock_t lock;
226 rb_nativethread_cond_t cond;
228 unsigned int dnt_cnt;
230 unsigned int max_cpu;
231 struct ccan_list_head grq;
233 unsigned int grq_cnt;
238 rb_nativethread_lock_t lock;
239 struct ccan_list_head running_dnts;
240 struct ccan_list_head snts;
246 rb_nativethread_lock_t lock;
247 struct ccan_list_head scheds;
251 bool timeslice_wait_inf;
254 rb_nativethread_cond_t barrier_complete_cond;
255 rb_nativethread_cond_t barrier_release_cond;
260 unsigned int barrier_joined_cnt;
261 unsigned int barrier_running_cnt;
262 unsigned int barrier_serial;
264 unsigned int barrier_lock_rec;
269void rb_ractor_sched_wait_terminate(
struct rb_vm_struct *vm, rb_nativethread_cond_t *cond,
unsigned long msec);
std::atomic< unsigned > rb_atomic_t
Type that is eligible for atomic operations.
void rb_unblock_function_t(void *)
This is the type of UBFs.