Mercurial > projects > ldc
comparison lphobos/std/c/linux/pthread.d @ 1:c53b6e3fe49a trunk
[svn r5] Initial commit. Most things are very rough.
author | lindquist |
---|---|
date | Sat, 01 Sep 2007 21:43:27 +0200 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
0:a9e71648e74d | 1:c53b6e3fe49a |
---|---|
1 /* Written by Walter Bright, Christopher E. Miller, and many others. | |
2 * www.digitalmars.com | |
3 * Placed into public domain. | |
4 */ | |
5 | |
6 module std.c.linux.pthread; | |
7 | |
8 extern (C) | |
9 { | |
10 /* pthread declarations taken from pthread headers and | |
11 http://svn.dsource.org/projects/bindings/trunk/pthreads.d | |
12 */ | |
13 | |
14 /* from bits/types.h | |
15 */ | |
16 | |
17 typedef int __time_t; | |
18 | |
19 /* from time.h | |
20 */ | |
21 | |
22 struct timespec | |
23 { | |
24 __time_t tv_sec; /* seconds */ | |
25 int tv_nsec; /* nanosecs. */ | |
26 } | |
27 | |
28 /* from bits/pthreadtypes.h | |
29 */ | |
30 | |
31 alias uint pthread_t; | |
32 alias uint pthread_key_t; | |
33 alias int pthread_once_t; | |
34 alias int clockid_t; | |
35 alias int pthread_spinlock_t; // volatile | |
36 | |
37 struct _pthread_descr_struct | |
38 { | |
39 /* Not defined in the headers ??? | |
40 Just needed here to typedef | |
41 the _pthread_descr pointer | |
42 */ | |
43 } | |
44 | |
45 typedef _pthread_descr_struct* _pthread_descr; | |
46 | |
47 struct _pthread_fastlock | |
48 { | |
49 int __status; | |
50 int __spinlock; | |
51 } | |
52 | |
53 typedef long __pthread_cond_align_t; | |
54 | |
55 struct pthread_cond_t | |
56 { | |
57 _pthread_fastlock __c_lock; | |
58 _pthread_descr __c_waiting; | |
59 char[48 | |
60 - _pthread_fastlock.sizeof | |
61 - _pthread_descr.sizeof | |
62 - __pthread_cond_align_t.sizeof | |
63 ] __padding; | |
64 __pthread_cond_align_t __align; | |
65 } | |
66 | |
67 struct pthread_condattr_t | |
68 { | |
69 int __dummy; | |
70 } | |
71 | |
72 struct pthread_mutex_t | |
73 { | |
74 int __m_reserved; | |
75 int __m_count; | |
76 _pthread_descr __m_owner; | |
77 int __m_kind; | |
78 _pthread_fastlock __m_lock; | |
79 } | |
80 | |
81 struct pthread_mutexattr_t | |
82 { | |
83 int __mutexkind; | |
84 } | |
85 | |
86 /* from pthread.h | |
87 */ | |
88 | |
89 struct _pthread_cleanup_buffer | |
90 { | |
91 void function(void*) __routine; | |
92 void* __arg; | |
93 int __canceltype; | |
94 _pthread_cleanup_buffer* __prev; | |
95 } | |
96 | |
97 struct __sched_param // bits/sched.h | |
98 { | |
99 int __sched_priority; | |
100 } | |
101 | |
102 struct pthread_attr_t | |
103 { | |
104 int __detachstate; | |
105 int __schedpolicy; | |
106 __sched_param schedparam; | |
107 int __inheritshed; | |
108 int __scope; | |
109 size_t __guardsize; | |
110 int __stackaddr_set; | |
111 void* __stackaddr; | |
112 size_t __stacksize; | |
113 } | |
114 | |
115 struct pthread_barrier_t | |
116 { | |
117 _pthread_fastlock __ba_lock; | |
118 int __ba_required; | |
119 int __ba_present; | |
120 _pthread_descr __ba_waiting; | |
121 } | |
122 | |
123 struct pthread_barrierattr_t | |
124 { | |
125 int __pshared; | |
126 } | |
127 | |
128 struct pthread_rwlockattr_t | |
129 { | |
130 int __lockkind; | |
131 int __pshared; | |
132 } | |
133 | |
134 struct pthread_rwlock_t | |
135 { | |
136 _pthread_fastlock __rw_lock; | |
137 int __rw_readers; | |
138 _pthread_descr __rw_writer; | |
139 _pthread_descr __rw_read_waiting; | |
140 _pthread_descr __rw_write_waiting; | |
141 int __rw_kind; | |
142 int __rw_pshared; | |
143 } | |
144 | |
145 int pthread_mutex_init(pthread_mutex_t*, pthread_mutexattr_t*); | |
146 int pthread_mutex_destroy(pthread_mutex_t*); | |
147 int pthread_mutex_trylock(pthread_mutex_t*); | |
148 int pthread_mutex_lock(pthread_mutex_t*); | |
149 int pthread_mutex_unlock(pthread_mutex_t*); | |
150 | |
151 int pthread_mutexattr_init(pthread_mutexattr_t*); | |
152 int pthread_mutexattr_destroy(pthread_mutexattr_t*); | |
153 | |
154 int pthread_cond_init(pthread_cond_t*, pthread_condattr_t*); | |
155 int pthread_cond_destroy(pthread_cond_t*); | |
156 int pthread_cond_signal(pthread_cond_t*); | |
157 int pthread_cond_wait(pthread_cond_t*, pthread_mutex_t*); | |
158 int pthread_cond_timedwait(pthread_cond_t*, pthread_mutex_t*, timespec*); | |
159 | |
160 int pthread_attr_init(pthread_attr_t*); | |
161 int pthread_attr_destroy(pthread_attr_t*); | |
162 int pthread_attr_setdetachstate(pthread_attr_t*, int); | |
163 int pthread_attr_getdetachstate(pthread_attr_t*, int*); | |
164 int pthread_attr_setinheritsched(pthread_attr_t*, int); | |
165 int pthread_attr_getinheritsched(pthread_attr_t*, int*); | |
166 int pthread_attr_setschedparam(pthread_attr_t*, __sched_param*); | |
167 int pthread_attr_getschedparam(pthread_attr_t*, __sched_param*); | |
168 int pthread_attr_setschedpolicy(pthread_attr_t*, int); | |
169 int pthread_attr_getschedpolicy(pthread_attr_t*, int*); | |
170 int pthread_attr_setscope(pthread_attr_t*, int); | |
171 int pthread_attr_getscope(pthread_attr_t*, int*); | |
172 int pthread_attr_setguardsize(pthread_attr_t*, size_t); | |
173 int pthread_attr_getguardsize(pthread_attr_t*, size_t*); | |
174 int pthread_attr_setstack(pthread_attr_t*, void*, size_t); | |
175 int pthread_attr_getstack(pthread_attr_t*, void**, size_t*); | |
176 int pthread_attr_setstackaddr(pthread_attr_t*, void*); | |
177 int pthread_attr_getstackaddr(pthread_attr_t*, void**); | |
178 int pthread_attr_setstacksize(pthread_attr_t*, size_t); | |
179 int pthread_attr_getstacksize(pthread_attr_t*, size_t*); | |
180 | |
181 int pthread_barrierattr_init(pthread_barrierattr_t*); | |
182 int pthread_barrierattr_getpshared(pthread_barrierattr_t*, int*); | |
183 int pthread_barrierattr_destroy(pthread_barrierattr_t*); | |
184 int pthread_barrierattr_setpshared(pthread_barrierattr_t*, int); | |
185 | |
186 int pthread_barrier_init(pthread_barrier_t*, pthread_barrierattr_t*, uint); | |
187 int pthread_barrier_destroy(pthread_barrier_t*); | |
188 int pthread_barrier_wait(pthread_barrier_t*); | |
189 | |
190 int pthread_condattr_init(pthread_condattr_t*); | |
191 int pthread_condattr_destroy(pthread_condattr_t*); | |
192 int pthread_condattr_getpshared(pthread_condattr_t*, int*); | |
193 int pthread_condattr_setpshared(pthread_condattr_t*, int); | |
194 | |
195 int pthread_detach(pthread_t); | |
196 void pthread_exit(void*); | |
197 int pthread_getattr_np(pthread_t, pthread_attr_t*); | |
198 int pthread_getconcurrency(); | |
199 int pthread_getcpuclockid(pthread_t, clockid_t*); | |
200 | |
201 int pthread_mutexattr_getpshared(pthread_mutexattr_t*, int*); | |
202 int pthread_mutexattr_setpshared(pthread_mutexattr_t*, int); | |
203 int pthread_mutexattr_settype(pthread_mutexattr_t*, int); | |
204 int pthread_mutexattr_gettype(pthread_mutexattr_t*, int*); | |
205 int pthread_mutex_timedlock(pthread_mutex_t*, timespec*); | |
206 int pthread_yield(); | |
207 | |
208 int pthread_rwlock_init(pthread_rwlock_t*, pthread_rwlockattr_t*); | |
209 int pthread_rwlock_destroy(pthread_rwlock_t*); | |
210 int pthread_rwlock_rdlock(pthread_rwlock_t*); | |
211 int pthread_rwlock_tryrdlock(pthread_rwlock_t*); | |
212 int pthread_rwlock_timedrdlock(pthread_rwlock_t*, timespec*); | |
213 int pthread_rwlock_wrlock(pthread_rwlock_t*); | |
214 int pthread_rwlock_trywrlock(pthread_rwlock_t*); | |
215 int pthread_rwlock_timedwrlock(pthread_rwlock_t*, timespec*); | |
216 int pthread_rwlock_unlock(pthread_rwlock_t*); | |
217 | |
218 int pthread_rwlockattr_init(pthread_rwlockattr_t*); | |
219 int pthread_rwlockattr_destroy(pthread_rwlockattr_t*); | |
220 int pthread_rwlockattr_getpshared(pthread_rwlockattr_t*, int*); | |
221 int pthread_rwlockattr_setpshared(pthread_rwlockattr_t*, int); | |
222 int pthread_rwlockattr_getkind_np(pthread_rwlockattr_t*, int*); | |
223 int pthread_rwlockattr_setkind_np(pthread_rwlockattr_t*, int); | |
224 | |
225 int pthread_spin_init(pthread_spinlock_t*, int); | |
226 int pthread_spin_destroy(pthread_spinlock_t*); | |
227 int pthread_spin_lock(pthread_spinlock_t*); | |
228 int pthread_spin_trylock(pthread_spinlock_t*); | |
229 int pthread_spin_unlock(pthread_spinlock_t*); | |
230 | |
231 int pthread_cancel(pthread_t); | |
232 void pthread_testcancel(); | |
233 int pthread_once(pthread_once_t*, void function()); | |
234 | |
235 int pthread_join(pthread_t, void**); | |
236 int pthread_create(pthread_t*, pthread_attr_t*, void*function(void*), void*); | |
237 pthread_t pthread_self(); | |
238 int pthread_equal(pthread_t, pthread_t); | |
239 int pthread_atfork(void function(), void function(), void function()); | |
240 void pthread_kill_other_threads_np(); | |
241 int pthread_setschedparam(pthread_t, int, __sched_param*); | |
242 int pthread_getschedparam(pthread_t, int*, __sched_param*); | |
243 int pthread_cond_broadcast(pthread_cond_t*); | |
244 int pthread_key_create(pthread_key_t*, void function(void*)); | |
245 int pthread_key_delete(pthread_key_t); | |
246 int pthread_setconcurrency(int); | |
247 int pthread_setspecific(pthread_key_t, void*); | |
248 void* pthread_getspecific(pthread_key_t); | |
249 int pthread_setcanceltype(int, int*); | |
250 int pthread_setcancelstate(int, int*); | |
251 | |
252 void _pthread_cleanup_push(_pthread_cleanup_buffer*, void function(void*), void*); | |
253 void _pthread_cleanup_push_defer(_pthread_cleanup_buffer*, void function(void*), void*); | |
254 void _pthread_cleanup_pop(_pthread_cleanup_buffer*, int); | |
255 void _pthread_cleanup_pop_restore(_pthread_cleanup_buffer*, int); | |
256 } | |
257 |