PTHREADS-WIN32 SNAPSHOT 1999-04-04 ---------------------------------- Web Site: http://sourceware.cygnus.com/pthreads-win32/ Coordinator: Ross Johnson 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 supported. Pthreads-win32 is free software, distributed under the GNU Library General Public License (LGPL). Pthreads-win32 is based substantially on a Win32 pthreads implementation contributed by John E. Bossom . Please see the 'Acknowledgements' section at the end of this announcement for the list of contributors. Change Summary -------------- Some POSIX 1b functions which were internally supported are now available as exported functions: sem_init sem_destroy sem_wait sem_trywait sem_post sched_yield sched_get_priority_min sched_get_priority_max Some minor bugs have been fixed. See the ChangeLog file for details. 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 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 --------------------------- Semaphores --------------------------- sem_init (POSIX 1b) sem_destroy (POSIX 1b) sem_post (POSIX 1b) sem_wait (POSIX 1b) sem_trywait (POSIX 1b) --------------------------- 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 --------------------------- 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 ------------ For the prebuilt DLL, export libs (for both MSVC and Mingw32), and pthread.h: ftp://sourceware.cygnus.com/pub/pthreads-win32/pthreads-dll-1999-03-16 Source tree: ftp://sourceware.cygnus.com/pub/pthreads-win32/pthreads-snap-1999-03-16.tar.gz Source files are available in unpacked form at: ftp://sourceware.cygnus.com/pub/pthreads-win32/sources 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 can be used of course. Mingw32: (ftp://ftp.xraylith.wisc.edu/pub/khan/gnu-win32/mingw32/egcs-1.1.1/) Mingw32 must use the thread-safe MSVCRT library. You can link against the export library libpthread32.a built under Mingw32 together 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. Generally: For convenience, the following pre-built files can be downloaded from the FTP site: ftp://sourceware.cygnus.com/pub/pthreads-win32/dll-latest/ pthread.h - the standard include file pthread.dll - built with MSVC cl compiler pthread.lib - built with MSVC cl compiler libpthread32.a - built with Mingw32 (use with MSVC pthread.dll) 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. Building the library with MSVC ------------------------------- There is currently no Makefile for building the library under MSVC. There is a batch file "buildlib.bat" which will build the library. Why you can't build the library with Cygwin or 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 under either Mingw32 or Cygwin. 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 . 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). Project Contributors (in order of appearance): Ben Elliston Ross Johnson Robert Colquhoun John E. Bossom Anders Norlander Tor Lillqvist Kevin Ruland Enjoy! Ross Johnson