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,
39 enum thread_sched_waiting_flag {
40 thread_sched_waiting_none = 0x00,
41 thread_sched_waiting_timeout = 0x01,
42 thread_sched_waiting_io_read = 0x02,
43 thread_sched_waiting_io_write = 0x08,
44 thread_sched_waiting_io_force = 0x40,
49#ifdef MY_RUBY_BUILD_MAY_TIME_TRAVEL
54 uint32_t event_serial;
60 struct ccan_list_node node;
68 struct ccan_list_node fd_node;
74 struct ccan_list_head waiters;
91 struct ccan_list_node ubf;
95 struct ccan_list_node readyq;
103 uint32_t event_serial;
107 uint32_t wake_pending_cnt;
116 size_t context_stack_size;
124 rb_nativethread_id_t thread_id;
126#ifdef RB_THREAD_T_HAS_NATIVE_ID
133 HANDLE interrupt_event;
143 rb_nativethread_lock_t running_th_lock;
145 struct ccan_list_node snts_node;
147 struct ccan_list_node running_dnts_node;
150 uint32_t barrier_counted_serial;
153 rb_nativethread_cond_t readyq;
155#ifdef USE_SIGALTSTACK
181 rb_nativethread_lock_t lock_;
190 int runnable_hot_th_waiting;
193 bool enable_mn_threads;
195 struct ccan_list_head readyq;
202 struct ccan_list_node grq_node;
203 struct ccan_list_node timeslice_node;
206struct rb_thread_context;
214#define th_has_coroutine(th) ((th)->sched.context != NULL)
221 rb_nativethread_lock_t lock;
225 rb_nativethread_cond_t cond;
227 unsigned int dnt_cnt;
229 unsigned int max_cpu;
230 struct ccan_list_head grq;
232 unsigned int grq_cnt;
237 rb_nativethread_lock_t lock;
238 struct ccan_list_head running_dnts;
239 struct ccan_list_head snts;
245 rb_nativethread_lock_t lock;
246 struct ccan_list_head scheds;
250 bool timeslice_wait_inf;
253 rb_nativethread_cond_t barrier_complete_cond;
254 rb_nativethread_cond_t barrier_release_cond;
259 unsigned int barrier_joined_cnt;
260 unsigned int barrier_running_cnt;
261 unsigned int barrier_serial;
263 unsigned int barrier_lock_rec;
268void 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.