1
|
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
|