d: Merge upstream dmd, druntime 4ca4140e58, phobos 454dff14d.
[official-gcc.git] / libphobos / libdruntime / core / sys / posix / sched.d
blobba7ab8984a9c2a6a01d640594b9dbda89f3db1a0
1 /**
2 * D header file for POSIX.
4 * Copyright: Copyright Sean Kelly 2005 - 2009.
5 * License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
6 * Authors: Sean Kelly,
7 Alex Rønne Petersen
8 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition
9 */
11 /* Copyright Sean Kelly 2005 - 2009.
12 * Distributed under the Boost Software License, Version 1.0.
13 * (See accompanying file LICENSE or copy at
14 * http://www.boost.org/LICENSE_1_0.txt)
16 module core.sys.posix.sched;
18 import core.sys.posix.config;
19 public import core.sys.posix.time;
20 public import core.sys.posix.sys.types;
22 version (OSX)
23 version = Darwin;
24 else version (iOS)
25 version = Darwin;
26 else version (TVOS)
27 version = Darwin;
28 else version (WatchOS)
29 version = Darwin;
31 version (Posix):
32 extern (C):
33 nothrow:
34 @nogc:
37 // Required
40 struct sched_param
42 int sched_priority (THR)
43 int sched_ss_low_priority (SS|TSP)
44 struct timespec sched_ss_repl_period (SS|TSP)
45 struct timespec sched_ss_init_budget (SS|TSP)
46 int sched_ss_max_repl (SS|TSP)
49 SCHED_FIFO
50 SCHED_RR
51 SCHED_SPORADIC (SS|TSP)
52 SCHED_OTHER
54 int sched_getparam(pid_t, sched_param*);
55 int sched_getscheduler(pid_t);
56 int sched_setparam(pid_t, const scope sched_param*);
57 int sched_setscheduler(pid_t, int, const scope sched_param*);
60 version (linux)
62 version (CRuntime_Musl)
64 struct sched_param
66 int sched_priority;
67 int __reserved1;
68 static if (muslRedirTime64)
69 c_long[2] __reserved2;
70 else
71 timespec[2] __reserved2;
72 int __reserved3;
75 else
77 struct sched_param
79 int sched_priority;
83 enum SCHED_OTHER = 0;
84 enum SCHED_FIFO = 1;
85 enum SCHED_RR = 2;
86 //SCHED_SPORADIC (SS|TSP)
87 enum SCHED_BATCH = 3;
88 enum SCHED_IDLE = 5;
89 enum SCHED_RESET_ON_FORK = 0x40000000;
91 else version (Darwin)
93 enum SCHED_OTHER = 1;
94 enum SCHED_FIFO = 4;
95 enum SCHED_RR = 2;
96 //SCHED_SPORADIC (SS|TSP)
98 struct sched_param
100 int sched_priority;
101 byte[__PTHREAD_MUTEX_SIZE__] __opaque;
104 else version (FreeBSD)
106 struct sched_param
108 int sched_priority;
111 enum SCHED_FIFO = 1;
112 enum SCHED_OTHER = 2;
113 enum SCHED_RR = 3;
115 else version (NetBSD)
117 struct sched_param
119 int sched_priority;
122 enum SCHED_FIFO = 1;
123 enum SCHED_OTHER = 0;
124 enum SCHED_RR = 2;
126 else version (OpenBSD)
128 struct sched_param
130 int sched_priority;
133 enum SCHED_FIFO = 1;
134 enum SCHED_OTHER = 2;
135 enum SCHED_RR = 3;
137 else version (DragonFlyBSD)
139 struct sched_param
141 int sched_priority;
144 enum SCHED_FIFO = 1;
145 enum SCHED_OTHER = 2;
146 enum SCHED_RR = 3;
148 else version (Solaris)
150 struct sched_param
152 int sched_priority;
153 int[8] sched_pad;
156 enum SCHED_OTHER = 0;
157 enum SCHED_FIFO = 1;
158 enum SCHED_RR = 2;
159 enum SCHED_SYS = 3;
160 enum SCHED_IA = 4;
161 enum SCHED_FSS = 5;
162 enum SCHED_FX = 6;
163 enum _SCHED_NEXT = 7;
165 else
167 static assert(false, "Unsupported platform");
170 int sched_getparam(pid_t, sched_param*);
171 int sched_getscheduler(pid_t);
172 int sched_setparam(pid_t, const scope sched_param*);
173 int sched_setscheduler(pid_t, int, const scope sched_param*);
176 // Thread (THR)
179 int sched_yield();
182 version (CRuntime_Glibc)
184 int sched_yield();
186 else version (Darwin)
188 int sched_yield();
190 else version (FreeBSD)
192 int sched_yield();
194 else version (NetBSD)
196 int sched_yield();
198 else version (OpenBSD)
200 int sched_yield();
202 else version (DragonFlyBSD)
204 int sched_yield();
206 else version (Solaris)
208 int sched_yield();
210 else version (CRuntime_Bionic)
212 int sched_yield();
214 else version (CRuntime_Musl)
216 int sched_yield();
218 else version (CRuntime_UClibc)
220 int sched_yield();
222 else
224 static assert(false, "Unsupported platform");
228 // Scheduling (TPS)
231 int sched_get_priority_max(int);
232 int sched_get_priority_min(int);
233 int sched_rr_get_interval(pid_t, timespec*);
236 version (CRuntime_Glibc)
238 int sched_get_priority_max(int);
239 int sched_get_priority_min(int);
240 int sched_rr_get_interval(pid_t, timespec*);
242 else version (Darwin)
244 int sched_get_priority_min(int);
245 int sched_get_priority_max(int);
246 //int sched_rr_get_interval(pid_t, timespec*); // FIXME: unavailable?
248 else version (FreeBSD)
250 int sched_get_priority_min(int);
251 int sched_get_priority_max(int);
252 int sched_rr_get_interval(pid_t, timespec*);
254 else version (NetBSD)
256 int sched_get_priority_min(int);
257 int sched_get_priority_max(int);
258 int sched_rr_get_interval(pid_t, timespec*);
260 else version (OpenBSD)
262 int sched_get_priority_min(int);
263 int sched_get_priority_max(int);
264 int sched_rr_get_interval(pid_t, timespec*);
266 else version (DragonFlyBSD)
268 int sched_get_priority_min(int);
269 int sched_get_priority_max(int);
270 int sched_rr_get_interval(pid_t, timespec*);
272 else version (Solaris)
274 int sched_get_priority_max(int);
275 int sched_get_priority_min(int);
276 int sched_rr_get_interval(pid_t, timespec*);
278 else version (CRuntime_Bionic)
280 int sched_get_priority_max(int);
281 int sched_get_priority_min(int);
282 int sched_rr_get_interval(pid_t, timespec*);
284 else version (CRuntime_Musl)
286 int sched_get_priority_max(int);
287 int sched_get_priority_min(int);
288 pragma(mangle, muslRedirTime64Mangle!("sched_rr_get_interval", "__sched_rr_get_interval_time64"))
289 int sched_rr_get_interval(pid_t, timespec*);
291 else version (CRuntime_UClibc)
293 int sched_get_priority_max(int);
294 int sched_get_priority_min(int);
295 int sched_rr_get_interval(pid_t, timespec*);
297 else
299 static assert(false, "Unsupported platform");