1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
|
PTHREADS-WIN32 SNAPSHOT 1999-11-02
----------------------------------
Web Site: http://sourceware.cygnus.com/pthreads-win32/
FTP Site: ftp://sourceware.cygnus.com/pub/pthreads-win32
Coordinator: Ross Johnson <rpj@ise.canberra.edu.au>
We are pleased to announce the availability of a new snapshot of
Pthreads-win32, an Open Source Software (OSS) implementation of the
Threads component of the POSIX 1003.1c 1995 Standard for Microsoft's
Win32 environment. Some functions from POSIX 1003.1b are also
supported including semaphores.
Pthreads-win32 is free software, distributed under the GNU Library
General Public License (LGPL).
Please see the 'Acknowledgements' section at the end of this
announcement for the list of contributors.
Change Summary (since the last snapshot)
----------------------------------------
(See the ChangeLog file for details.)
Bugs fixed:
- ctime_r macro had an incorrect argument (Erik Hensema),
- threads were not being created
PTHREAD_CANCEL_DEFERRED. This should have
had little effect as deferred is the only
supported type. (Ross Johnson).
Some compatibility improvements added, eg.
- pthread_setcancelstate accepts NULL pointer
for the previous value argument. Ditto for
pthread_setcanceltype. This is compatible
with Solaris but should not affect
standard applications (Erik Hensema)
Some new tests have been added.
Level of standards conformance
------------------------------
The following POSIX 1003.1c 1995 options are defined:
_POSIX_THREADS
_POSIX_THREAD_SAFE_FUNCTIONS
_POSIX_THREAD_ATTR_STACKSIZE
The following POSIX 1003.1c 1995 options are not defined:
_POSIX_THREAD_ATTR_STACKADDR
_POSIX_THREAD_PRIORITY_SCHEDULING
_POSIX_THREAD_PRIO_INHERIT
_POSIX_THREAD_PRIO_PROTECT
_POSIX_THREAD_PROCESS_SHARED
The following POSIX 1003.1b option is defined:
_POSIX_SEMAPHORES
The following functions are implemented:
---------------------------
PThreads
---------------------------
pthread_attr_init
pthread_attr_destroy
pthread_attr_getdetachstate
pthread_attr_getstackaddr
pthread_attr_getstacksize
pthread_attr_setdetachstate
pthread_attr_setstackaddr
pthread_attr_setstacksize
pthread_create
pthread_detach
pthread_equal
pthread_exit
pthread_join
pthread_once
pthread_self
pthread_cancel
pthread_cleanup_pop
pthread_cleanup_push
pthread_setcancelstate
pthread_setcanceltype
pthread_testcancel
---------------------------
Thread Specific Data
---------------------------
pthread_key_create
pthread_key_delete
pthread_setspecific
pthread_getspecific
---------------------------
Mutexes
---------------------------
pthread_mutexattr_init
pthread_mutexattr_destroy
pthread_mutexattr_getpshared
pthread_mutexattr_setpshared
pthread_mutex_init
pthread_mutex_destroy
pthread_mutex_lock
pthread_mutex_trylock
pthread_mutex_unlock
---------------------------
Condition Variables
---------------------------
pthread_condattr_init
pthread_condattr_destroy
pthread_condattr_getpshared
pthread_condattr_setpshared
pthread_cond_init
pthread_cond_destroy
pthread_cond_wait
pthread_cond_timedwait
pthread_cond_signal
pthread_cond_broadcast
---------------------------
Read/Write Locks:
---------------------------
pthread_rwlock_init
pthread_rwlock_destroy
pthread_rwlock_tryrdlock
pthread_rwlock_trywrlock
pthread_rwlock_rdlock
pthread_rwlock_rwlock
pthread_rwlock_unlock
---------------------------
Semaphores
---------------------------
sem_init (POSIX 1b)
sem_destroy (POSIX 1b)
sem_post (POSIX 1b)
sem_wait (POSIX 1b)
sem_trywait (POSIX 1b)
sem_open (POSIX 1b - returns an error ENOSYS)
sem_close (POSIX 1b - returns an error ENOSYS)
sem_unlink (POSIX 1b - returns an error ENOSYS)
sem_getvalue (POSIX 1b - returns an error ENOSYS)
---------------------------
RealTime Scheduling
---------------------------
pthread_attr_getschedparam
pthread_attr_setschedparam
pthread_getschedparam
pthread_setschedparam
sched_get_priority_max (POSIX 1b)
sched_get_priority_min (POSIX 1b)
sched_yield (POSIX 1b)
---------------------------
Signals
---------------------------
pthread_sigmask
---------------------------
Static Initializers (macros)
---------------------------
PTHREAD_ONCE_INIT
PTHREAD_MUTEX_INITIALIZER
PTHREAD_COND_INITIALIZER
PTHREAD_RWLOCK_INITIALIZER
---------------------------
Thread-Safe C Runtime Library (macros)
---------------------------
strtok_r
asctime_r
ctime_r
gmtime_r
localtime_r
rand_r
The following functions are not implemented:
---------------------------
RealTime Scheduling
---------------------------
pthread_attr_getinheritsched
pthread_attr_getschedpolicy
pthread_attr_getscope
pthread_attr_setinheritsched
pthread_attr_setschedpolicy
pthread_attr_setscope
pthread_mutex_getprioceiling
pthread_mutex_setprioceiling
pthread_mutex_attr_getprioceiling
pthread_mutex_attr_getprotocol
pthread_mutex_attr_setprioceiling
pthread_mutex_attr_setprotocol
---------------------------
Fork Handlers
---------------------------
pthread_atfork
---------------------------
Stdio
---------------------------
flockfile
ftrylockfile
funlockfile
getc_unlocked
getchar_unlocked
putc_unlocked
putchar_unlocked
---------------------------
Thread-Safe C Runtime Library
---------------------------
readdir_r
getgrgid_r
getgrnam_r
getpwuid_r
getpwnam_r
---------------------------
Signals
---------------------------
pthread_kill
sigtimedwait
sigwait
sigwaitinfo
The library includes two non-API functions for creating cancellation
points in applications and libraries:
pthreadCancelableWait
pthreadCancelableTimedWait
Availability
------------
The prebuilt DLL, export libs (for both MSVC and Mingw32), and the header
files (pthread.h, semaphore.h, sched.h) are available along with the
complete source code.
The source code can be found at:
ftp://sourceware.cygnus.com/pub/pthreads-win32
and as individual source code files at
ftp://sourceware.cygnus.com/pub/pthreads-win32/source
The pre-built DLL, export libraries and include files can be found at:
ftp://sourceware.cygnus.com/pub/pthreads-win32/dll-latest
Mailing List
------------
There is a mailing list for discussing pthreads on Win32. To join,
send email to:
pthreads-win32-subscribe@sourceware.cygnus.com
Application Development Environments
------------------------------------
MSVC:
MSVC works.
Mingw32: (ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/egcs-1.1.1/)
Mingw32 must use the thread-safe MSVCRT library (see the FAQ). You can link
against the export library libpthread32.a built under Mingw32
but you must run your application with the version of pthread.dll built
with MSVC.
Cygwin: (http://sourceware.cygnus.com/cygwin/)
Cygwin aims to provide a complete POSIX environment on top of Win32, including
threads. When this is complete, developers using Cygwin will not need
pthreads-win32. At this time, Cygwin has preliminary support for multithreaded
development, however, this is not turned on by default. We have not tested
pthreads-win32 against Cygwin.
Generally:
For convenience, the following pre-built files are available on the FTP site
(see Availability above):
pthread.h - for POSIX 1c threads
semaphore.h - for POSIX 1b semaphores
sched.h - for POSIX 1b scheduling
pthread.dll - built with MSVC cl compiler on NT4.0
pthread.lib - built with MSVC cl compiler on NT4.0
libpthread32.a - built with Mingw32 on Win98 (use with
MSVC pthread.dll for runtime)
These are the only files you need in order to build POSIX threads
applications for Win32 using either MSVC or Mingw32.
See the FAQ file in the source tree for additional information.
Why you can't build the DLL itself with Mingw32 (yet)
-----------------------------------------------------
The library makes use of exception handling internally (Win32 SEH if
compiled with MSVC and C++ EH otherwise). Unfortunately, current
versions of egcs (g++) do not have thread-safe exception handling
and therefore the DLL pthread.dll cannot be built.
However, it is possible to build applications which make use of
pthreads-win32, using Mingw32's gcc or g++.
Building the library with MSVC
------------------------------
There is currently no Makefile for building the library under MSVC.
This is partly because my access to MSVC is via telnet to a remote NT
machine. There is a batch file "buildlib.bat" which will build the
library.
Documentation
-------------
Currently, there is no documentation included in the package apart
from the copious comments in the source code.
For POSIX Thread API programming, several reference books are
available:
Programming with POSIX Threads
David R. Butenhof
Addison-Wesley (pub)
Pthreads Programming
By Bradford Nichols, Dick Buttlar & Jacqueline Proulx Farrell
O'Reilly (pub)
Acknowledgements
----------------
This library is based substantially on a Win32 pthreads
implementation contributed by John Bossom <John.Bossom@cognos.com>.
The implementation of condition variables is derived from the work
of Douglas Schmidt et al
(http://www.cs.wustl.edu/~schmidt/win32-cv-1.html).
Contributors (in approximate order of appearance)
Ben Elliston bje@cygnus.com
Ross Johnson rpj@ise.canberra.edu.au
Robert Colquhoun rjc@trump.net.au
John E. Bossom John.Bossom@cognos.com
Anders Norlander anorland@hem2.passagen.se
Tor Lillqvist tml@iki.fi
Kevin Ruland Kevin.Ruland@anheuser-busch.com
Mike Russo miker@eai.com
Mark E. Armstrong avail@pacbell.net
Lorin Hochstein lmh@xiphos.ca
Peter Slacik Peter.Slacik@tatramed.sk
Mumit Khan khan@xraylith.wisc.edu
Aurelio Medina aureliom@crt.com
Milan Gardian mg@tatramed.sk
If you aren't on the list and believe you should be let me know.
Enjoy!
Ross Johnson
|