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;
140 rb_nativethread_lock_t running_th_lock;
142 struct ccan_list_node snts_node;
144 struct ccan_list_node running_dnts_node;
147 uint32_t barrier_counted_serial;
150 rb_nativethread_cond_t readyq;
152#ifdef USE_SIGALTSTACK
178 rb_nativethread_lock_t lock_;
187 int runnable_hot_th_waiting;
190 bool enable_mn_threads;
192 struct ccan_list_head readyq;
199 struct ccan_list_node grq_node;
200 struct ccan_list_node timeslice_node;
203struct rb_thread_context;
211#define th_has_coroutine(th) ((th)->sched.context != NULL)
218 rb_nativethread_lock_t lock;
222 rb_nativethread_cond_t cond;
224 unsigned int dnt_cnt;
226 unsigned int max_cpu;
227 struct ccan_list_head grq;
229 unsigned int grq_cnt;
234 rb_nativethread_lock_t lock;
235 struct ccan_list_head running_dnts;
236 struct ccan_list_head snts;
242 rb_nativethread_lock_t lock;
243 struct ccan_list_head scheds;
247 bool timeslice_wait_inf;
250 rb_nativethread_cond_t barrier_complete_cond;
251 rb_nativethread_cond_t barrier_release_cond;
256 unsigned int barrier_joined_cnt;
257 unsigned int barrier_running_cnt;
258 unsigned int barrier_serial;
260 unsigned int barrier_lock_rec;
265void 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.