Mercurial > projects > ldc
comparison druntime/import/core/sys/posix/pthread.d @ 1458:e0b2d67cfe7c
Added druntime (this should be removed once it works).
author | Robert Clipsham <robert@octarineparrot.com> |
---|---|
date | Tue, 02 Jun 2009 17:43:06 +0100 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
1456:7b218ec1044f | 1458:e0b2d67cfe7c |
---|---|
1 /** | |
2 * D header file for POSIX. | |
3 * | |
4 * Copyright: Copyright Sean Kelly 2005 - 2009. | |
5 * License: <a href="http://www.boost.org/LICENSE_1_0.txt>Boost License 1.0</a>. | |
6 * Authors: Sean Kelly | |
7 * Standards: The Open Group Base Specifications Issue 6, IEEE Std 1003.1, 2004 Edition | |
8 * | |
9 * Copyright Sean Kelly 2005 - 2009. | |
10 * Distributed under the Boost Software License, Version 1.0. | |
11 * (See accompanying file LICENSE_1_0.txt or copy at | |
12 * http://www.boost.org/LICENSE_1_0.txt) | |
13 */ | |
14 module core.sys.posix.pthread; | |
15 | |
16 private import core.sys.posix.config; | |
17 public import core.sys.posix.sys.types; | |
18 public import core.sys.posix.sched; | |
19 public import core.sys.posix.time; | |
20 | |
21 extern (C): | |
22 | |
23 // | |
24 // Required | |
25 // | |
26 /* | |
27 PTHREAD_CANCEL_ASYNCHRONOUS | |
28 PTHREAD_CANCEL_ENABLE | |
29 PTHREAD_CANCEL_DEFERRED | |
30 PTHREAD_CANCEL_DISABLE | |
31 PTHREAD_CANCELED | |
32 PTHREAD_COND_INITIALIZER | |
33 PTHREAD_CREATE_DETACHED | |
34 PTHREAD_CREATE_JOINABLE | |
35 PTHREAD_EXPLICIT_SCHED | |
36 PTHREAD_INHERIT_SCHED | |
37 PTHREAD_MUTEX_INITIALIZER | |
38 PTHREAD_ONCE_INIT | |
39 PTHREAD_PROCESS_SHARED | |
40 PTHREAD_PROCESS_PRIVATE | |
41 | |
42 int pthread_atfork(void function(), void function(), void function()); | |
43 int pthread_attr_destroy(pthread_attr_t*); | |
44 int pthread_attr_getdetachstate(in pthread_attr_t*, int*); | |
45 int pthread_attr_getschedparam(in pthread_attr_t*, sched_param*); | |
46 int pthread_attr_init(pthread_attr_t*); | |
47 int pthread_attr_setdetachstate(pthread_attr_t*, int); | |
48 int pthread_attr_setschedparam(in pthread_attr_t*, sched_param*); | |
49 int pthread_cancel(pthread_t); | |
50 void pthread_cleanup_push(void function(void*), void*); | |
51 void pthread_cleanup_pop(int); | |
52 int pthread_cond_broadcast(pthread_cond_t*); | |
53 int pthread_cond_destroy(pthread_cond_t*); | |
54 int pthread_cond_init(in pthread_cond_t*, pthread_condattr_t*); | |
55 int pthread_cond_signal(pthread_cond_t*); | |
56 int pthread_cond_timedwait(pthread_cond_t*, pthread_mutex_t*, in timespec*); | |
57 int pthread_cond_wait(pthread_cond_t*, pthread_mutex_t*); | |
58 int pthread_condattr_destroy(pthread_condattr_t*); | |
59 int pthread_condattr_init(pthread_condattr_t*); | |
60 int pthread_create(pthread_t*, in pthread_attr_t*, void* function(void*), void*); | |
61 int pthread_detach(pthread_t); | |
62 int pthread_equal(pthread_t, pthread_t); | |
63 void pthread_exit(void*); | |
64 void* pthread_getspecific(pthread_key_t); | |
65 int pthread_join(pthread_t, void**); | |
66 int pthread_key_create(pthread_key_t*, void function(void*)); | |
67 int pthread_key_delete(pthread_key_t); | |
68 int pthread_mutex_destroy(pthread_mutex_t*); | |
69 int pthread_mutex_init(pthread_mutex_t*, pthread_mutexattr_t*); | |
70 int pthread_mutex_lock(pthread_mutex_t*); | |
71 int pthread_mutex_trylock(pthread_mutex_t*); | |
72 int pthread_mutex_unlock(pthread_mutex_t*); | |
73 int pthread_mutexattr_destroy(pthread_mutexattr_t*); | |
74 int pthread_mutexattr_init(pthread_mutexattr_t*); | |
75 int pthread_once(pthread_once_t*, void function()); | |
76 int pthread_rwlock_destroy(pthread_rwlock_t*); | |
77 int pthread_rwlock_init(in pthread_rwlock_t*, pthread_rwlockattr_t*); | |
78 int pthread_rwlock_rdlock(pthread_rwlock_t*); | |
79 int pthread_rwlock_tryrdlock(pthread_rwlock_t*); | |
80 int pthread_rwlock_trywrlock(pthread_rwlock_t*); | |
81 int pthread_rwlock_unlock(pthread_rwlock_t*); | |
82 int pthread_rwlock_wrlock(pthread_rwlock_t*); | |
83 int pthread_rwlockattr_destroy(pthread_rwlockattr_t*); | |
84 int pthread_rwlockattr_init(pthread_rwlockattr_t*); | |
85 pthread_t pthread_self(); | |
86 int pthread_setcancelstate(int, int*); | |
87 int pthread_setcanceltype(int, int*); | |
88 int pthread_setspecific(pthread_key_t, in void*); | |
89 void pthread_testcancel(); | |
90 */ | |
91 version( linux ) | |
92 { | |
93 enum | |
94 { | |
95 PTHREAD_CANCEL_ENABLE, | |
96 PTHREAD_CANCEL_DISABLE | |
97 } | |
98 | |
99 enum | |
100 { | |
101 PTHREAD_CANCEL_DEFERRED, | |
102 PTHREAD_CANCEL_ASYNCHRONOUS | |
103 } | |
104 | |
105 enum PTHREAD_CANCELED = cast(void*) -1; | |
106 | |
107 //enum pthread_mutex_t PTHREAD_COND_INITIALIZER = { __LOCK_ALT_INITIALIZER, 0, "", 0 }; | |
108 | |
109 enum | |
110 { | |
111 PTHREAD_CREATE_JOINABLE, | |
112 PTHREAD_CREATE_DETACHED | |
113 } | |
114 | |
115 enum | |
116 { | |
117 PTHREAD_INHERIT_SCHED, | |
118 PTHREAD_EXPLICIT_SCHED | |
119 } | |
120 | |
121 //enum pthread_mutex_t PTHREAD_MUTEX_INITIALIZER = { 0, 0, null, PTHREAD_MUTEX_NORMAL, { 0, 0 } }; | |
122 | |
123 enum PTHREAD_ONCE_INIT = 0; | |
124 | |
125 enum | |
126 { | |
127 PTHREAD_PROCESS_PRIVATE, | |
128 PTHREAD_PROCESS_SHARED | |
129 } | |
130 } | |
131 else version( OSX ) | |
132 { | |
133 enum | |
134 { | |
135 PTHREAD_CANCEL_ENABLE = 1, | |
136 PTHREAD_CANCEL_DISABLE = 0 | |
137 } | |
138 | |
139 enum | |
140 { | |
141 PTHREAD_CANCEL_DEFERRED = 2, | |
142 PTHREAD_CANCEL_ASYNCHRONOUS = 0 | |
143 } | |
144 | |
145 enum PTHREAD_CANCELED = cast(void*) -1; | |
146 | |
147 //enum pthread_mutex_t PTHREAD_COND_INITIALIZER = { __LOCK_ALT_INITIALIZER, 0, "", 0 }; | |
148 | |
149 enum | |
150 { | |
151 PTHREAD_CREATE_JOINABLE = 1, | |
152 PTHREAD_CREATE_DETACHED = 2 | |
153 } | |
154 | |
155 enum | |
156 { | |
157 PTHREAD_INHERIT_SCHED = 1, | |
158 PTHREAD_EXPLICIT_SCHED = 2 | |
159 } | |
160 | |
161 //enum pthread_mutex_t PTHREAD_MUTEX_INITIALIZER = { 0, 0, null, PTHREAD_MUTEX_NORMAL, { 0, 0 } }; | |
162 | |
163 enum PTHREAD_ONCE_INIT = 0; | |
164 | |
165 enum | |
166 { | |
167 PTHREAD_PROCESS_PRIVATE = 2, | |
168 PTHREAD_PROCESS_SHARED = 1 | |
169 } | |
170 } | |
171 | |
172 int pthread_atfork(void function(), void function(), void function()); | |
173 int pthread_attr_destroy(pthread_attr_t*); | |
174 int pthread_attr_getdetachstate(in pthread_attr_t*, int*); | |
175 int pthread_attr_getschedparam(in pthread_attr_t*, sched_param*); | |
176 int pthread_attr_init(pthread_attr_t*); | |
177 int pthread_attr_setdetachstate(pthread_attr_t*, int); | |
178 int pthread_attr_setschedparam(in pthread_attr_t*, sched_param*); | |
179 int pthread_cancel(pthread_t); | |
180 | |
181 version( linux ) | |
182 { | |
183 alias void function(void*) _pthread_cleanup_routine; | |
184 | |
185 struct _pthread_cleanup_buffer | |
186 { | |
187 _pthread_cleanup_routine __routine; | |
188 void* __arg; | |
189 int __canceltype; | |
190 _pthread_cleanup_buffer* __prev; | |
191 } | |
192 | |
193 void _pthread_cleanup_push(_pthread_cleanup_buffer*, _pthread_cleanup_routine, void*); | |
194 void _pthread_cleanup_pop(_pthread_cleanup_buffer*, int); | |
195 | |
196 struct pthread_cleanup | |
197 { | |
198 _pthread_cleanup_buffer buffer = void; | |
199 | |
200 void push()( _pthread_cleanup_routine routine, void* arg ) | |
201 { | |
202 _pthread_cleanup_push( &buffer, routine, arg ); | |
203 } | |
204 | |
205 void pop()( int execute ) | |
206 { | |
207 _pthread_cleanup_pop( &buffer, execute ); | |
208 } | |
209 } | |
210 } | |
211 else version( OSX ) | |
212 { | |
213 alias void function(void*) _pthread_cleanup_routine; | |
214 | |
215 struct _pthread_cleanup_buffer | |
216 { | |
217 _pthread_cleanup_routine __routine; | |
218 void* __arg; | |
219 _pthread_cleanup_buffer* __next; | |
220 } | |
221 | |
222 struct pthread_cleanup | |
223 { | |
224 _pthread_cleanup_buffer buffer = void; | |
225 | |
226 void push()( _pthread_cleanup_routine routine, void* arg ) | |
227 { | |
228 pthread_t self = pthread_self(); | |
229 buffer.__routine = routine; | |
230 buffer.__arg = arg; | |
231 buffer.__next = cast(_pthread_cleanup_buffer*) self.__cleanup_stack; | |
232 self.__cleanup_stack = cast(pthread_handler_rec*) &buffer; | |
233 } | |
234 | |
235 void pop()( int execute ) | |
236 { | |
237 pthread_t self = pthread_self(); | |
238 self.__cleanup_stack = cast(pthread_handler_rec*) buffer.__next; | |
239 if( execute ) | |
240 { | |
241 buffer.__routine( buffer.__arg ); | |
242 } | |
243 } | |
244 } | |
245 } | |
246 else | |
247 { | |
248 void pthread_cleanup_push(void function(void*), void*); | |
249 void pthread_cleanup_pop(int); | |
250 } | |
251 | |
252 int pthread_cond_broadcast(pthread_cond_t*); | |
253 int pthread_cond_destroy(pthread_cond_t*); | |
254 int pthread_cond_init(in pthread_cond_t*, pthread_condattr_t*); | |
255 int pthread_cond_signal(pthread_cond_t*); | |
256 int pthread_cond_timedwait(pthread_cond_t*, pthread_mutex_t*, in timespec*); | |
257 int pthread_cond_wait(pthread_cond_t*, pthread_mutex_t*); | |
258 int pthread_condattr_destroy(pthread_condattr_t*); | |
259 int pthread_condattr_init(pthread_condattr_t*); | |
260 int pthread_create(pthread_t*, in pthread_attr_t*, void* function(void*), void*); | |
261 int pthread_detach(pthread_t); | |
262 int pthread_equal(pthread_t, pthread_t); | |
263 void pthread_exit(void*); | |
264 void* pthread_getspecific(pthread_key_t); | |
265 int pthread_join(pthread_t, void**); | |
266 int pthread_key_create(pthread_key_t*, void function(void*)); | |
267 int pthread_key_delete(pthread_key_t); | |
268 int pthread_mutex_destroy(pthread_mutex_t*); | |
269 int pthread_mutex_init(pthread_mutex_t*, pthread_mutexattr_t*); | |
270 int pthread_mutex_lock(pthread_mutex_t*); | |
271 int pthread_mutex_trylock(pthread_mutex_t*); | |
272 int pthread_mutex_unlock(pthread_mutex_t*); | |
273 int pthread_mutexattr_destroy(pthread_mutexattr_t*); | |
274 int pthread_mutexattr_init(pthread_mutexattr_t*); | |
275 int pthread_once(pthread_once_t*, void function()); | |
276 int pthread_rwlock_destroy(pthread_rwlock_t*); | |
277 int pthread_rwlock_init(in pthread_rwlock_t*, pthread_rwlockattr_t*); | |
278 int pthread_rwlock_rdlock(pthread_rwlock_t*); | |
279 int pthread_rwlock_tryrdlock(pthread_rwlock_t*); | |
280 int pthread_rwlock_trywrlock(pthread_rwlock_t*); | |
281 int pthread_rwlock_unlock(pthread_rwlock_t*); | |
282 int pthread_rwlock_wrlock(pthread_rwlock_t*); | |
283 int pthread_rwlockattr_destroy(pthread_rwlockattr_t*); | |
284 int pthread_rwlockattr_init(pthread_rwlockattr_t*); | |
285 pthread_t pthread_self(); | |
286 int pthread_setcancelstate(int, int*); | |
287 int pthread_setcanceltype(int, int*); | |
288 int pthread_setspecific(pthread_key_t, in void*); | |
289 void pthread_testcancel(); | |
290 | |
291 // | |
292 // Barrier (BAR) | |
293 // | |
294 /* | |
295 PTHREAD_BARRIER_SERIAL_THREAD | |
296 | |
297 int pthread_barrier_destroy(pthread_barrier_t*); | |
298 int pthread_barrier_init(pthread_barrier_t*, in pthread_barrierattr_t*, uint); | |
299 int pthread_barrier_wait(pthread_barrier_t*); | |
300 int pthread_barrierattr_destroy(pthread_barrierattr_t*); | |
301 int pthread_barrierattr_getpshared(in pthread_barrierattr_t*, int*); (BAR|TSH) | |
302 int pthread_barrierattr_init(pthread_barrierattr_t*); | |
303 int pthread_barrierattr_setpshared(pthread_barrierattr_t*, int); (BAR|TSH) | |
304 */ | |
305 | |
306 version( linux ) | |
307 { | |
308 enum PTHREAD_BARRIER_SERIAL_THREAD = -1; | |
309 | |
310 int pthread_barrier_destroy(pthread_barrier_t*); | |
311 int pthread_barrier_init(pthread_barrier_t*, in pthread_barrierattr_t*, uint); | |
312 int pthread_barrier_wait(pthread_barrier_t*); | |
313 int pthread_barrierattr_destroy(pthread_barrierattr_t*); | |
314 int pthread_barrierattr_getpshared(in pthread_barrierattr_t*, int*); | |
315 int pthread_barrierattr_init(pthread_barrierattr_t*); | |
316 int pthread_barrierattr_setpshared(pthread_barrierattr_t*, int); | |
317 } | |
318 | |
319 // | |
320 // Clock (CS) | |
321 // | |
322 /* | |
323 int pthread_condattr_getclock(in pthread_condattr_t*, clockid_t*); | |
324 int pthread_condattr_setclock(pthread_condattr_t*, clockid_t); | |
325 */ | |
326 | |
327 // | |
328 // Spinlock (SPI) | |
329 // | |
330 /* | |
331 int pthread_spin_destroy(pthread_spinlock_t*); | |
332 int pthread_spin_init(pthread_spinlock_t*, int); | |
333 int pthread_spin_lock(pthread_spinlock_t*); | |
334 int pthread_spin_trylock(pthread_spinlock_t*); | |
335 int pthread_spin_unlock(pthread_spinlock_t*); | |
336 */ | |
337 | |
338 version( linux ) | |
339 { | |
340 int pthread_spin_destroy(pthread_spinlock_t*); | |
341 int pthread_spin_init(pthread_spinlock_t*, int); | |
342 int pthread_spin_lock(pthread_spinlock_t*); | |
343 int pthread_spin_trylock(pthread_spinlock_t*); | |
344 int pthread_spin_unlock(pthread_spinlock_t*); | |
345 } | |
346 | |
347 // | |
348 // XOpen (XSI) | |
349 // | |
350 /* | |
351 PTHREAD_MUTEX_DEFAULT | |
352 PTHREAD_MUTEX_ERRORCHECK | |
353 PTHREAD_MUTEX_NORMAL | |
354 PTHREAD_MUTEX_RECURSIVE | |
355 | |
356 int pthread_attr_getguardsize(in pthread_attr_t*, size_t*); | |
357 int pthread_attr_setguardsize(pthread_attr_t*, size_t); | |
358 int pthread_getconcurrency(); | |
359 int pthread_mutexattr_gettype(in pthread_mutexattr_t*, int*); | |
360 int pthread_mutexattr_settype(pthread_mutexattr_t*, int); | |
361 int pthread_setconcurrency(int); | |
362 */ | |
363 | |
364 version( linux ) | |
365 { | |
366 enum PTHREAD_MUTEX_NORMAL = 0; | |
367 enum PTHREAD_MUTEX_RECURSIVE = 1; | |
368 enum PTHREAD_MUTEX_ERRORCHECK = 2; | |
369 enum PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL; | |
370 | |
371 int pthread_attr_getguardsize(in pthread_attr_t*, size_t*); | |
372 int pthread_attr_setguardsize(pthread_attr_t*, size_t); | |
373 int pthread_getconcurrency(); | |
374 int pthread_mutexattr_gettype(in pthread_mutexattr_t*, int*); | |
375 int pthread_mutexattr_settype(pthread_mutexattr_t*, int); | |
376 int pthread_setconcurrency(int); | |
377 } | |
378 else version( OSX ) | |
379 { | |
380 enum PTHREAD_MUTEX_NORMAL = 0; | |
381 enum PTHREAD_MUTEX_ERRORCHECK = 1; | |
382 enum PTHREAD_MUTEX_RECURSIVE = 2; | |
383 enum PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_NORMAL; | |
384 | |
385 int pthread_attr_getguardsize(in pthread_attr_t*, size_t*); | |
386 int pthread_attr_setguardsize(pthread_attr_t*, size_t); | |
387 int pthread_getconcurrency(); | |
388 int pthread_mutexattr_gettype(in pthread_mutexattr_t*, int*); | |
389 int pthread_mutexattr_settype(pthread_mutexattr_t*, int); | |
390 int pthread_setconcurrency(int); | |
391 } | |
392 else version( freebsd ) | |
393 { | |
394 enum | |
395 { | |
396 PTHREAD_MUTEX_ERRORCHECK = 1, | |
397 PTHREAD_MUTEX_RECURSIVE = 2, | |
398 PTHREAD_MUTEX_NORMAL = 3, | |
399 PTHREAD_MUTEX_ADAPTIVE_NP = 4, | |
400 PTHREAD_MUTEX_TYPE_MAX | |
401 } | |
402 enum PTHREAD_MUTEX_DEFAULT = PTHREAD_MUTEX_ERRORCHECK; | |
403 | |
404 int pthread_attr_getguardsize(in pthread_attr_t*, size_t*); | |
405 int pthread_attr_setguardsize(pthread_attr_t*, size_t); | |
406 int pthread_getconcurrency(); | |
407 int pthread_mutexattr_gettype(pthread_mutexattr_t*, int*); | |
408 int pthread_mutexattr_settype(pthread_mutexattr_t*, int); | |
409 int pthread_setconcurrency(int); | |
410 } | |
411 | |
412 // | |
413 // CPU Time (TCT) | |
414 // | |
415 /* | |
416 int pthread_getcpuclockid(pthread_t, clockid_t*); | |
417 */ | |
418 | |
419 version( linux ) | |
420 { | |
421 int pthread_getcpuclockid(pthread_t, clockid_t*); | |
422 } | |
423 | |
424 // | |
425 // Timeouts (TMO) | |
426 // | |
427 /* | |
428 int pthread_mutex_timedlock(pthread_mutex_t*, timespec*); | |
429 int pthread_rwlock_timedrdlock(pthread_rwlock_t*, in timespec*); | |
430 int pthread_rwlock_timedwrlock(pthread_rwlock_t*, in timespec*); | |
431 */ | |
432 | |
433 version( linux ) | |
434 { | |
435 int pthread_mutex_timedlock(pthread_mutex_t*, timespec*); | |
436 int pthread_rwlock_timedrdlock(pthread_rwlock_t*, in timespec*); | |
437 int pthread_rwlock_timedwrlock(pthread_rwlock_t*, in timespec*); | |
438 } | |
439 else version( OSX ) | |
440 { | |
441 int pthread_mutex_timedlock(pthread_mutex_t*, timespec*); | |
442 int pthread_rwlock_timedrdlock(pthread_rwlock_t*, in timespec*); | |
443 int pthread_rwlock_timedwrlock(pthread_rwlock_t*, in timespec*); | |
444 } | |
445 | |
446 // | |
447 // Priority (TPI|TPP) | |
448 // | |
449 /* | |
450 PTHREAD_PRIO_INHERIT (TPI) | |
451 PTHREAD_PRIO_NONE (TPP|TPI) | |
452 PTHREAD_PRIO_PROTECT (TPI) | |
453 | |
454 int pthread_mutex_getprioceiling(in pthread_mutex_t*, int*); (TPP) | |
455 int pthread_mutex_setprioceiling(pthread_mutex_t*, int, int*); (TPP) | |
456 int pthread_mutexattr_getprioceiling(pthread_mutexattr_t*, int*); (TPP) | |
457 int pthread_mutexattr_getprotocol(in pthread_mutexattr_t*, int*); (TPI|TPP) | |
458 int pthread_mutexattr_setprioceiling(pthread_mutexattr_t*, int); (TPP) | |
459 int pthread_mutexattr_setprotocol(pthread_mutexattr_t*, int); (TPI|TPP) | |
460 */ | |
461 | |
462 // | |
463 // Scheduling (TPS) | |
464 // | |
465 /* | |
466 PTHREAD_SCOPE_PROCESS | |
467 PTHREAD_SCOPE_SYSTEM | |
468 | |
469 int pthread_attr_getinheritsched(in pthread_attr_t*, int*); | |
470 int pthread_attr_getschedpolicy(in pthread_attr_t*, int*); | |
471 int pthread_attr_getscope(in pthread_attr_t*, int*); | |
472 int pthread_attr_setinheritsched(pthread_attr_t*, int); | |
473 int pthread_attr_setschedpolicy(pthread_attr_t*, int); | |
474 int pthread_attr_setscope(pthread_attr_t*, int); | |
475 int pthread_getschedparam(pthread_t, int*, sched_param*); | |
476 int pthread_setschedparam(pthread_t, int, in sched_param*); | |
477 int pthread_setschedprio(pthread_t, int); | |
478 */ | |
479 | |
480 version( linux ) | |
481 { | |
482 enum | |
483 { | |
484 PTHREAD_SCOPE_SYSTEM, | |
485 PTHREAD_SCOPE_PROCESS | |
486 } | |
487 | |
488 int pthread_attr_getinheritsched(in pthread_attr_t*, int*); | |
489 int pthread_attr_getschedpolicy(in pthread_attr_t*, int*); | |
490 int pthread_attr_getscope(in pthread_attr_t*, int*); | |
491 int pthread_attr_setinheritsched(pthread_attr_t*, int); | |
492 int pthread_attr_setschedpolicy(pthread_attr_t*, int); | |
493 int pthread_attr_setscope(pthread_attr_t*, int); | |
494 int pthread_getschedparam(pthread_t, int*, sched_param*); | |
495 int pthread_setschedparam(pthread_t, int, in sched_param*); | |
496 //int pthread_setschedprio(pthread_t, int); | |
497 } | |
498 else version( OSX ) | |
499 { | |
500 enum | |
501 { | |
502 PTHREAD_SCOPE_SYSTEM = 1, | |
503 PTHREAD_SCOPE_PROCESS = 2 | |
504 } | |
505 | |
506 int pthread_attr_getinheritsched(in pthread_attr_t*, int*); | |
507 int pthread_attr_getschedpolicy(in pthread_attr_t*, int*); | |
508 int pthread_attr_getscope(in pthread_attr_t*, int*); | |
509 int pthread_attr_setinheritsched(pthread_attr_t*, int); | |
510 int pthread_attr_setschedpolicy(pthread_attr_t*, int); | |
511 int pthread_attr_setscope(pthread_attr_t*, int); | |
512 int pthread_getschedparam(pthread_t, int*, sched_param*); | |
513 int pthread_setschedparam(pthread_t, int, in sched_param*); | |
514 //int pthread_setschedprio(pthread_t, int); | |
515 } | |
516 else version( freebsd ) | |
517 { | |
518 enum | |
519 { | |
520 PTHREAD_SCOPE_PROCESS = 0, | |
521 PTHREAD_SCOPE_SYSTEM = 0x2 | |
522 } | |
523 | |
524 int pthread_attr_getinheritsched(in pthread_attr_t*, int*); | |
525 int pthread_attr_getschedpolicy(in pthread_attr_t*, int*); | |
526 int pthread_attr_getscope(in pthread_attr_t*, int*); | |
527 int pthread_attr_setinheritsched(pthread_attr_t*, int); | |
528 int pthread_attr_setschedpolicy(pthread_attr_t*, int); | |
529 int pthread_attr_setscope(in pthread_attr_t*, int); | |
530 int pthread_getschedparam(pthread_t, int*, sched_param*); | |
531 int pthread_setschedparam(pthread_t, int, sched_param*); | |
532 //int pthread_setschedprio(pthread_t, int); | |
533 } | |
534 | |
535 // | |
536 // Stack (TSA|TSS) | |
537 // | |
538 /* | |
539 int pthread_attr_getstack(in pthread_attr_t*, void**, size_t*); (TSA|TSS) | |
540 int pthread_attr_getstackaddr(in pthread_attr_t*, void**); (TSA) | |
541 int pthread_attr_getstacksize(in pthread_attr_t*, size_t*); (TSS) | |
542 int pthread_attr_setstack(pthread_attr_t*, void*, size_t); (TSA|TSS) | |
543 int pthread_attr_setstackaddr(pthread_attr_t*, void*); (TSA) | |
544 int pthread_attr_setstacksize(pthread_attr_t*, size_t); (TSS) | |
545 */ | |
546 | |
547 version( linux ) | |
548 { | |
549 int pthread_attr_getstack(in pthread_attr_t*, void**, size_t*); | |
550 int pthread_attr_getstackaddr(in pthread_attr_t*, void**); | |
551 int pthread_attr_getstacksize(in pthread_attr_t*, size_t*); | |
552 int pthread_attr_setstack(pthread_attr_t*, void*, size_t); | |
553 int pthread_attr_setstackaddr(pthread_attr_t*, void*); | |
554 int pthread_attr_setstacksize(pthread_attr_t*, size_t); | |
555 } | |
556 else version( OSX ) | |
557 { | |
558 int pthread_attr_getstack(in pthread_attr_t*, void**, size_t*); | |
559 int pthread_attr_getstackaddr(in pthread_attr_t*, void**); | |
560 int pthread_attr_getstacksize(in pthread_attr_t*, size_t*); | |
561 int pthread_attr_setstack(pthread_attr_t*, void*, size_t); | |
562 int pthread_attr_setstackaddr(pthread_attr_t*, void*); | |
563 int pthread_attr_setstacksize(pthread_attr_t*, size_t); | |
564 } | |
565 else version( freebsd ) | |
566 { | |
567 int pthread_attr_getstack(in pthread_attr_t*, void**, size_t*); | |
568 int pthread_attr_getstackaddr(in pthread_attr_t*, void**); | |
569 int pthread_attr_getstacksize(in pthread_attr_t*, size_t*); | |
570 int pthread_attr_setstack(pthread_attr_t*, void*, size_t); | |
571 int pthread_attr_setstackaddr(pthread_attr_t*, void*); | |
572 int pthread_attr_setstacksize(pthread_attr_t*, size_t); | |
573 } | |
574 | |
575 // | |
576 // Shared Synchronization (TSH) | |
577 // | |
578 /* | |
579 int pthread_condattr_getpshared(in pthread_condattr_t*, int*); | |
580 int pthread_condattr_setpshared(pthread_condattr_t*, int); | |
581 int pthread_mutexattr_getpshared(in pthread_mutexattr_t*, int*); | |
582 int pthread_mutexattr_setpshared(pthread_mutexattr_t*, int); | |
583 int pthread_rwlockattr_getpshared(in pthread_rwlockattr_t*, int*); | |
584 int pthread_rwlockattr_setpshared(pthread_rwlockattr_t*, int); | |
585 */ |