Deleted Added
full compact
pthread.h (13547) pthread.h (17706)
1/*
2 * Copyright (c) 1993, 1994 by Chris Provenzano, proven@mit.edu
3 * Copyright (c) 1995 by John Birrell <jb@cimlogic.com.au>
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 26 unchanged lines hidden (view full) ---

35#define _PTHREAD_H_
36
37/*
38 * Header files.
39 */
40#include <sys/cdefs.h>
41#include <sys/types.h>
42#include <sys/time.h>
1/*
2 * Copyright (c) 1993, 1994 by Chris Provenzano, proven@mit.edu
3 * Copyright (c) 1995 by John Birrell <jb@cimlogic.com.au>
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions
8 * are met:

--- 26 unchanged lines hidden (view full) ---

35#define _PTHREAD_H_
36
37/*
38 * Header files.
39 */
40#include <sys/cdefs.h>
41#include <sys/types.h>
42#include <sys/time.h>
43#include <sys/signal.h>
44#include <limits.h>
43
44/*
45
46/*
45 * Forward thread structure definition. This is opaque to the user.
47 * Run-time invariant values:
46 */
48 */
47struct pthread;
49#define PTHREAD_DESTRUCTOR_ITERATIONS 4
50#define PTHREAD_KEYS_MAX 256
51#define PTHREAD_STACK_MIN 1024
52#define PTHREAD_THREADS_MAX ULONG_MAX
48
49/*
53
54/*
50 * Queue definitions.
55 * Compile time symbolic constants for portability specifications:
56 *
57 * Note that those commented out are not currently supported by the
58 * implementation.
51 */
59 */
52struct pthread_queue {
53 struct pthread *q_next;
54 struct pthread *q_last;
55 void *q_data;
56};
60#define _POSIX_THREADS
61#define _POSIX_THREAD_ATTR_STACKADDR
62#define _POSIX_THREAD_ATTR_STACKSIZE
63#define _POSIX_THREAD_PRIORITY_SCHEDULING
64/* #define _POSIX_THREAD_PRIO_INHERIT */
65/* #define _POSIX_THREAD_PRIO_PROTECT */
66/* #define _POSIX_THREAD_PROCESS_SHARED */
67#define _POSIX_THREAD_SAFE_FUNCTIONS
57
58/*
68
69/*
59 * Static queue initialization values.
70 * Forward structure definitions.
71 *
72 * These are mostly opaque to the user.
60 */
73 */
61#define PTHREAD_QUEUE_INITIALIZER { NULL, NULL, NULL }
74struct pthread;
75struct pthread_attr;
76struct pthread_cond;
77struct pthread_cond_attr;
78struct pthread_mutex;
79struct pthread_mutex_attr;
80struct pthread_once;
81struct sched_param;
62
82
63/*
64 * Mutex definitions.
65 */
66enum pthread_mutextype {
67 MUTEX_TYPE_FAST = 1,
68 MUTEX_TYPE_COUNTING_FAST = 2, /* Recursive */
69 MUTEX_TYPE_MAX
70};
71
72union pthread_mutex_data {
73 void *m_ptr;
74 int m_count;
75};
76
77struct pthread_mutex {
78 enum pthread_mutextype m_type;
79 struct pthread_queue m_queue;
80 struct pthread *m_owner;
81 union pthread_mutex_data m_data;
82 long m_flags;
83};
84
85/*
83/*
86 * Flags for mutexes.
84 * Primitive system data type definitions required by P1003.1c.
85 *
86 * Note that P1003.1c specifies that there are no defined comparison
87 * or assignment operators for the types pthread_attr_t, pthread_cond_t,
88 * pthread_condattr_t, pthread_mutex_t, pthread_mutexattr_t.
87 */
89 */
88#define MUTEX_FLAGS_PRIVATE 0x01
89#define MUTEX_FLAGS_INITED 0x02
90#define MUTEX_FLAGS_BUSY 0x04
90typedef struct pthread *pthread_t;
91typedef struct pthread_attr *pthread_attr_t;
92typedef struct pthread_mutex *pthread_mutex_t;
93typedef struct pthread_mutex_attr *pthread_mutexattr_t;
94typedef struct pthread_cond *pthread_cond_t;
95typedef struct pthread_cond_attr *pthread_condattr_t;
96typedef int pthread_key_t;
97typedef struct pthread_once pthread_once_t;
91
92/*
98
99/*
93 * Static mutex initialization values.
100 * Additional type definitions:
101 *
102 * Note that P1003.1c reserves the prefixes pthread_ and PTHREAD_ for
103 * use in header symbols.
94 */
104 */
95#define PTHREAD_MUTEX_INITIALIZER \
96 { MUTEX_TYPE_FAST, PTHREAD_QUEUE_INITIALIZER, \
97 NULL, { NULL }, MUTEX_FLAGS_INITED }
105typedef void *pthread_addr_t;
106typedef void *(*pthread_startroutine_t) (void *);
98
107
99struct pthread_mutex_attr {
100 enum pthread_mutextype m_type;
101 long m_flags;
102};
103
104/*
105 * Condition variable definitions.
106 */
107enum pthread_cond_type {
108 COND_TYPE_FAST,
109 COND_TYPE_MAX
110};
111
112struct pthread_cond {
113 enum pthread_cond_type c_type;
114 struct pthread_queue c_queue;
115 void *c_data;
116 long c_flags;
117};
118
119struct pthread_cond_attr {
120 enum pthread_cond_type c_type;
121 long c_flags;
122};
123
124/*
108/*
125 * Flags for condition variables.
126 */
127#define COND_FLAGS_PRIVATE 0x01
128#define COND_FLAGS_INITED 0x02
129#define COND_FLAGS_BUSY 0x04
130
131/*
132 * Static cond initialization values.
133 */
134#define PTHREAD_COND_INITIALIZER \
135 { COND_TYPE_FAST, PTHREAD_QUEUE_INITIALIZER, NULL, COND_FLAGS_INITED }
136
137/*
138 * Cleanup definitions.
139 */
140struct pthread_cleanup {
141 struct pthread_cleanup *next;
142 void (*routine) ();
143 void *routine_arg;
144};
145
146/*
147 * Scheduling definitions.
148 */
149enum schedparam_policy {
150 SCHED_RR,
151 SCHED_IO,
152 SCHED_FIFO,
153 SCHED_OTHER
154};
155
156struct pthread_attr {
157 enum schedparam_policy schedparam_policy;
158 int prio;
159 int suspend;
160 int flags;
161 void *arg_attr;
162 void (*cleanup_attr) ();
163 void *stackaddr_attr;
164 size_t stacksize_attr;
165};
166
167struct sched_param {
168 int prio;
169 void *no_data;
170};
171
172/*
173 * Once definitions.
174 */
175struct pthread_once {
109 * Once definitions.
110 */
111struct pthread_once {
176 int state;
177 struct pthread_mutex mutex;
112 int state;
113 pthread_mutex_t mutex;
178};
179
180/*
181 * Flags for once initialization.
182 */
183#define PTHREAD_NEEDS_INIT 0
184#define PTHREAD_DONE_INIT 1
185
186/*
187 * Static once initialization values.
188 */
114};
115
116/*
117 * Flags for once initialization.
118 */
119#define PTHREAD_NEEDS_INIT 0
120#define PTHREAD_DONE_INIT 1
121
122/*
123 * Static once initialization values.
124 */
189#define PTHREAD_ONCE_INIT { PTHREAD_NEEDS_INIT, PTHREAD_MUTEX_INITIALIZER }
125#define PTHREAD_ONCE_INIT { PTHREAD_NEEDS_INIT, NULL }
190
191/*
126
127/*
192 * Type definitions.
193 */
194typedef int pthread_key_t;
195typedef struct pthread *pthread_t;
196typedef struct pthread_attr pthread_attr_t;
197typedef struct pthread_cond pthread_cond_t;
198typedef struct pthread_cond_attr pthread_condattr_t;
199typedef struct pthread_mutex pthread_mutex_t;
200typedef struct pthread_mutex_attr pthread_mutexattr_t;
201typedef struct pthread_once pthread_once_t;
202typedef void *pthread_addr_t;
203typedef void *(*pthread_startroutine_t) (void *);
204
205/*
206 * Default attribute arguments.
207 */
208#define pthread_condattr_default NULL
209#define pthread_mutexattr_default NULL
210#ifndef PTHREAD_KERNEL
211#define pthread_attr_default NULL
212#endif
213
214/*
215 * Thread function prototype definitions:
216 */
217__BEGIN_DECLS
128 * Default attribute arguments.
129 */
130#define pthread_condattr_default NULL
131#define pthread_mutexattr_default NULL
132#ifndef PTHREAD_KERNEL
133#define pthread_attr_default NULL
134#endif
135
136/*
137 * Thread function prototype definitions:
138 */
139__BEGIN_DECLS
218int pthread_create __P((pthread_t *, const pthread_attr_t *,
219 void *(*start_routine) (void *), void *));
220void pthread_exit __P((void *));
221pthread_t pthread_self __P((void));
222int pthread_equal __P((pthread_t, pthread_t));
223int pthread_getprio __P((pthread_t));
224int pthread_setprio __P((pthread_t, int));
225int pthread_join __P((pthread_t, void **));
226int pthread_detach __P((pthread_t *));
227int pthread_resume __P((pthread_t));
228int pthread_suspend __P((pthread_t));
229void pthread_yield __P((void));
230int pthread_setschedparam __P((pthread_t pthread, int policy,
231 struct sched_param * param));
232int pthread_getschedparam __P((pthread_t pthread, int *policy,
233 struct sched_param * param));
234int pthread_kill __P((struct pthread *, int));
235int pthread_cleanup_push __P((void (*routine) (void *), void *routine_arg));
236void pthread_cleanup_pop __P((int execute));
237int pthread_cond_init __P((pthread_cond_t *, const pthread_condattr_t *));
238int pthread_cond_timedwait __P((pthread_cond_t *, pthread_mutex_t *,
239 const struct timespec * abstime));
240int pthread_cond_wait __P((pthread_cond_t *, pthread_mutex_t *));
241int pthread_cond_signal __P((pthread_cond_t *));
242int pthread_cond_broadcast __P((pthread_cond_t *));
243int pthread_cond_destroy __P((pthread_cond_t *));
244int pthread_mutex_init __P((pthread_mutex_t *, const pthread_mutexattr_t *));
245int pthread_mutex_lock __P((pthread_mutex_t *));
246int pthread_mutex_unlock __P((pthread_mutex_t *));
247int pthread_mutex_trylock __P((pthread_mutex_t *));
248int pthread_mutex_destroy __P((pthread_mutex_t *));
249int pthread_attr_init __P((pthread_attr_t *));
250int pthread_attr_destroy __P((pthread_attr_t *));
251int pthread_attr_setstacksize __P((pthread_attr_t *, size_t));
252int pthread_attr_getstacksize __P((pthread_attr_t *, size_t *));
253int pthread_attr_setstackaddr __P((pthread_attr_t *, void *));
254int pthread_attr_getstackaddr __P((pthread_attr_t *, void **));
255int pthread_attr_setdetachstate __P((pthread_attr_t *, int));
256int pthread_attr_getdetachstate __P((pthread_attr_t *, int *));
257int pthread_attr_setscope __P((pthread_attr_t *, int));
258int pthread_attr_getscope __P((pthread_attr_t *, int *));
259int pthread_attr_setinheritsched __P((pthread_attr_t *, int));
260int pthread_attr_getinheritsched __P((pthread_attr_t *, int *));
261int pthread_attr_setschedpolicy __P((pthread_attr_t *, int));
262int pthread_attr_getschedpolicy __P((pthread_attr_t *, int *));
263int pthread_attr_setschedparam __P((pthread_attr_t *, struct sched_param *));
264int pthread_attr_getschedparam __P((pthread_attr_t *, struct sched_param *));
265int pthread_attr_setfloatstate __P((pthread_attr_t *, int));
266int pthread_attr_getfloatstate __P((pthread_attr_t *, int *));
267int pthread_attr_setcleanup __P((pthread_attr_t *, void (*routine) (void *), void *));
268int pthread_attr_setcreatesuspend __P((pthread_attr_t *));
269int pthread_once __P((pthread_once_t *, void (*init_routine) (void)));
270int pthread_keycreate __P((pthread_key_t *, void (*routine) (void *)));
271int pthread_setspecific __P((pthread_key_t, const void *));
272int pthread_getspecific __P((pthread_key_t, void **));
273int pthread_key_delete __P((pthread_key_t));
140int pthread_attr_destroy __P((pthread_attr_t *));
141int pthread_attr_getinheritsched __P((pthread_attr_t *, int *));
142int pthread_attr_getschedparam __P((pthread_attr_t *,
143 struct sched_param *));
144int pthread_attr_getschedpolicy __P((pthread_attr_t *, int *));
145int pthread_attr_getscope __P((pthread_attr_t *, int *));
146int pthread_attr_getstacksize __P((pthread_attr_t *, size_t *));
147int pthread_attr_getstackaddr __P((pthread_attr_t *, void **));
148int pthread_attr_getdetachstate __P((pthread_attr_t *, int *));
149int pthread_attr_init __P((pthread_attr_t *));
150int pthread_attr_setinheritsched __P((pthread_attr_t *, int));
151int pthread_attr_setschedparam __P((pthread_attr_t *,
152 struct sched_param *));
153int pthread_attr_setschedpolicy __P((pthread_attr_t *, int));
154int pthread_attr_setscope __P((pthread_attr_t *, int));
155int pthread_attr_setstacksize __P((pthread_attr_t *, size_t));
156int pthread_attr_setstackaddr __P((pthread_attr_t *, void *));
157int pthread_attr_setdetachstate __P((pthread_attr_t *, int));
158void pthread_cleanup_pop __P((int execute));
159int pthread_cleanup_push __P((void (*routine) (void *),
160 void *routine_arg));
161int pthread_condattr_destroy __P((pthread_condattr_t *attr));
162int pthread_condattr_init __P((pthread_condattr_t *attr));
163int pthread_condattr_getpshared __P((pthread_condattr_t *attr,
164 int *pshared));
165int pthread_condattr_setpshared __P((pthread_condattr_t *attr,
166 int pshared));
167int pthread_cond_broadcast __P((pthread_cond_t *));
168int pthread_cond_destroy __P((pthread_cond_t *));
169int pthread_cond_init __P((pthread_cond_t *,
170 const pthread_condattr_t *));
171int pthread_cond_signal __P((pthread_cond_t *));
172int pthread_cond_timedwait __P((pthread_cond_t *,
173 pthread_mutex_t *, const struct timespec * abstime));
174int pthread_cond_wait __P((pthread_cond_t *, pthread_mutex_t *));
175int pthread_create __P((pthread_t *, const pthread_attr_t *,
176 void *(*start_routine) (void *), void *));
177int pthread_detach __P((pthread_t *));
178int pthread_equal __P((pthread_t, pthread_t));
179void pthread_exit __P((void *));
180int pthread_getspecific __P((pthread_key_t, void **));
181int pthread_join __P((pthread_t, void **));
182int pthread_key_create __P((pthread_key_t *,
183 void (*routine) (void *)));
184int pthread_key_delete __P((pthread_key_t));
185int pthread_kill __P((struct pthread *, int));
186int pthread_mutexattr_destroy __P((pthread_mutexattr_t *));
187int pthread_mutexattr_getprioceiling __P((pthread_mutexattr_t *,
188 int *prioceiling));
189int pthread_mutexattr_getprotocol __P((pthread_mutexattr_t *,
190 int *protocol));
191int pthread_mutexattr_getpshared __P((pthread_mutexattr_t *,
192 int *pshared));
193int pthread_mutexattr_init __P((pthread_mutexattr_t *));
194int pthread_mutexattr_setprioceiling __P((pthread_mutexattr_t *,
195 int prioceiling));
196int pthread_mutexattr_setprotocol __P((pthread_mutexattr_t *,
197 int protocol));
198int pthread_mutexattr_setpshared __P((pthread_mutexattr_t *,
199 int pshared));
200int pthread_mutex_destroy __P((pthread_mutex_t *));
201int pthread_mutex_getprioceiling __P((pthread_mutex_t *));
202int pthread_mutex_init __P((pthread_mutex_t *,
203 const pthread_mutexattr_t *));
204int pthread_mutex_lock __P((pthread_mutex_t *));
205int pthread_mutex_setprioceiling __P((pthread_mutex_t *));
206int pthread_mutex_trylock __P((pthread_mutex_t *));
207int pthread_mutex_unlock __P((pthread_mutex_t *));
208int pthread_once __P((pthread_once_t *,
209 void (*init_routine) (void)));
210pthread_t pthread_self __P((void));
211int pthread_setcancelstate __P((int, int *));
212int pthread_setcanceltype __P((int, int *));
213int pthread_setspecific __P((pthread_key_t, const void *));
214int pthread_sigmask __P((int, const sigset_t *, sigset_t *));
215int pthread_testcancel __P((void));
216
217
218int pthread_getprio __P((pthread_t));
219int pthread_setprio __P((pthread_t, int));
220void pthread_yield __P((void));
221int pthread_setschedparam __P((pthread_t pthread, int policy,
222 struct sched_param * param));
223int pthread_getschedparam __P((pthread_t pthread, int *policy,
224 struct sched_param * param));
225int pthread_attr_setfloatstate __P((pthread_attr_t *, int));
226int pthread_attr_getfloatstate __P((pthread_attr_t *, int *));
227int pthread_attr_setcleanup __P((pthread_attr_t *,
228 void (*routine) (void *), void *));
274__END_DECLS
275
276#endif
229__END_DECLS
230
231#endif