| PTHREADS-WIN32 RELEASE 2.8.0 (2006-12-22) |
| ----------------------------------------- |
| Web Site: http://sources.redhat.com/pthreads-win32/ |
| FTP Site: ftp://sources.redhat.com/pub/pthreads-win32 |
| Maintainer: Ross Johnson <rpj@callisto.canberra.edu.au> |
| |
| |
| We are pleased to announce the availability of a new release of |
| Pthreads-win32, an Open Source Software implementation of the |
| Threads component of the POSIX 1003.1 2001 Standard for Microsoft's |
| Win32 environment. Some functions from other sections of POSIX |
| 1003.1 2001 are also supported including semaphores and scheduling |
| functions. |
| |
| Some common non-portable functions are also implemented for |
| additional compatibility, as are a few functions specific |
| to pthreads-win32 for easier integration with Win32 applications. |
| |
| Pthreads-win32 is free software, distributed under the GNU Lesser |
| General Public License (LGPL). |
| |
| |
| Acknowledgements |
| ---------------- |
| This library is based originally on a Win32 pthreads |
| implementation contributed by John Bossom <John.Bossom@cognos.com>. |
| |
| The implementation of Condition Variables uses algorithms developed |
| by Alexander Terekhov and Louis Thomas. |
| |
| The implementation of POSIX mutexes has been improved by Thomas Pfaff |
| and later by Alexander Terekhov. |
| |
| The implementation of Spinlocks and Barriers was contributed |
| by Ross Johnson. |
| |
| The implementation of read/write locks was contributed by |
| Aurelio Medina and improved by Alexander Terekhov. |
| |
| Many others have contributed significant time and effort to solve crutial |
| problems in order to make the library workable, robust and reliable. |
| |
| Thanks to Xavier Leroy for granting permission to use and modify his |
| LinuxThreads manual pages. |
| |
| Thanks to The Open Group for making the Single Unix Specification |
| publicly available - many of the manual pages included in the package |
| were extracted from it. |
| |
| There is also a separate CONTRIBUTORS file. This file and others are |
| on the web site: |
| |
| http://sources.redhat.com/pthreads-win32 |
| |
| As much as possible, the ChangeLog file acknowledges contributions to the |
| code base in more detail. |
| |
| |
| Changes since the last release |
| ------------------------------ |
| These are now documented in the NEWS file. |
| See the ChangeLog file also. |
| |
| |
| Known Bugs |
| ---------- |
| These are now documented in the BUGS file. |
| |
| |
| Level of standards conformance |
| ------------------------------ |
| |
| The following POSIX 1003.1 2001 options are defined and set to 200112L: |
| |
| _POSIX_THREADS |
| _POSIX_THREAD_SAFE_FUNCTIONS |
| _POSIX_THREAD_ATTR_STACKSIZE |
| _POSIX_THREAD_PRIORITY_SCHEDULING |
| _POSIX_SEMAPHORES |
| _POSIX_READER_WRITER_LOCKS |
| _POSIX_SPIN_LOCKS |
| _POSIX_BARRIERS |
| |
| |
| The following POSIX 1003.1 2001 options are defined and set to -1: |
| |
| _POSIX_THREAD_ATTR_STACKADDR |
| _POSIX_THREAD_PRIO_INHERIT |
| _POSIX_THREAD_PRIO_PROTECT |
| _POSIX_THREAD_PROCESS_SHARED |
| |
| |
| The following POSIX 1003.1 2001 limits are defined and set: |
| |
| _POSIX_THREAD_THREADS_MAX |
| _POSIX_SEM_VALUE_MAX |
| _POSIX_SEM_NSEMS_MAX |
| _POSIX_THREAD_KEYS_MAX |
| _POSIX_THREAD_DESTRUCTOR_ITERATIONS |
| PTHREAD_STACK_MIN |
| PTHREAD_THREADS_MAX |
| SEM_VALUE_MAX |
| SEM_NSEMS_MAX |
| PTHREAD_KEYS_MAX |
| PTHREAD_DESTRUCTOR_ITERATIONS |
| |
| |
| 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_mutexattr_gettype |
| pthread_mutexattr_settype (types: PTHREAD_MUTEX_DEFAULT |
| PTHREAD_MUTEX_NORMAL |
| PTHREAD_MUTEX_ERRORCHECK |
| PTHREAD_MUTEX_RECURSIVE ) |
| pthread_mutex_init |
| pthread_mutex_destroy |
| pthread_mutex_lock |
| pthread_mutex_trylock |
| pthread_mutex_timedlock |
| 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_timedrdlock |
| pthread_rwlock_rwlock |
| pthread_rwlock_timedwrlock |
| pthread_rwlock_unlock |
| pthread_rwlockattr_init |
| pthread_rwlockattr_destroy |
| pthread_rwlockattr_getpshared |
| pthread_rwlockattr_setpshared |
| |
| --------------------------- |
| Spin Locks |
| --------------------------- |
| pthread_spin_init |
| pthread_spin_destroy |
| pthread_spin_lock |
| pthread_spin_unlock |
| pthread_spin_trylock |
| |
| --------------------------- |
| Barriers |
| --------------------------- |
| pthread_barrier_init |
| pthread_barrier_destroy |
| pthread_barrier_wait |
| pthread_barrierattr_init |
| pthread_barrierattr_destroy |
| pthread_barrierattr_getpshared |
| pthread_barrierattr_setpshared |
| |
| --------------------------- |
| Semaphores |
| --------------------------- |
| sem_init |
| sem_destroy |
| sem_post |
| sem_wait |
| sem_trywait |
| sem_timedwait |
| sem_getvalue (# free if +ve, # of waiters if -ve) |
| sem_open (returns an error ENOSYS) |
| sem_close (returns an error ENOSYS) |
| sem_unlink (returns an error ENOSYS) |
| |
| --------------------------- |
| RealTime Scheduling |
| --------------------------- |
| pthread_attr_getschedparam |
| pthread_attr_setschedparam |
| pthread_attr_getinheritsched |
| pthread_attr_setinheritsched |
| pthread_attr_getschedpolicy (only supports SCHED_OTHER) |
| pthread_attr_setschedpolicy (only supports SCHED_OTHER) |
| pthread_getschedparam |
| pthread_setschedparam |
| pthread_getconcurrency |
| pthread_setconcurrency |
| pthread_attr_getscope |
| pthread_attr_setscope (only supports PTHREAD_SCOPE_SYSTEM) |
| sched_get_priority_max |
| sched_get_priority_min |
| sched_rr_get_interval (returns an error ENOTSUP) |
| sched_setscheduler (only supports SCHED_OTHER) |
| sched_getscheduler (only supports SCHED_OTHER) |
| sched_yield |
| |
| --------------------------- |
| Signals |
| --------------------------- |
| pthread_sigmask |
| pthread_kill (only supports zero sig value, |
| for thread validity checking) |
| |
| --------------------------- |
| Non-portable routines (see the README.NONPORTABLE file for usage) |
| --------------------------- |
| pthread_getw32threadhandle_np |
| pthread_timechange_handler_np |
| pthread_delay_np |
| pthread_mutexattr_getkind_np |
| pthread_mutexattr_setkind_np (types: PTHREAD_MUTEX_FAST_NP, |
| PTHREAD_MUTEX_ERRORCHECK_NP, |
| PTHREAD_MUTEX_RECURSIVE_NP, |
| PTHREAD_MUTEX_ADAPTIVE_NP, |
| PTHREAD_MUTEX_TIMED_NP) |
| pthread_num_processors_np |
| pthread_win32_process_attach_np (Required when statically linking |
| the library) |
| pthread_win32_process_detach_np (Required when statically linking |
| the library) |
| pthread_win32_thread_attach_np (Required when statically linking |
| the library) |
| pthread_win32_thread_detach_np (Required when statically linking |
| the library) |
| |
| --------------------------- |
| Static Initializers |
| --------------------------- |
| PTHREAD_ONCE_INIT |
| PTHREAD_MUTEX_INITIALIZER |
| PTHREAD_RECURSIVE_MUTEX_INITIALIZER |
| PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP |
| PTHREAD_ERRORCHECK_MUTEX_INITIALIZER |
| PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP |
| PTHREAD_COND_INITIALIZER |
| PTHREAD_RWLOCK_INITIALIZER |
| PTHREAD_SPINLOCK_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_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 |
| --------------------------- |
| sigtimedwait |
| sigwait |
| sigwaitinfo |
| |
| --------------------------- |
| General |
| --------------------------- |
| sysconf |
| |
| 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://sources.redhat.com/pub/pthreads-win32 |
| |
| and as individual source code files at |
| |
| ftp://sources.redhat.com/pub/pthreads-win32/source |
| |
| The pre-built DLL, export libraries and include files can be found at: |
| |
| ftp://sources.redhat.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 |
| ------------------------------------ |
| |
| See the README file for more information. |
| |
| MSVC: |
| MSVC using SEH works. Distribute pthreadVSE.dll with your application. |
| MSVC using C++ EH works. Distribute pthreadVCE.dll with your application. |
| MSVC using C setjmp/longjmp works. Distribute pthreadVC.dll with your application. |
| |
| |
| Mingw32: |
| See the FAQ, Questions 6 and 10. |
| |
| Mingw using C++ EH works. Distribute pthreadGCE.dll with your application. |
| Mingw using C setjmp/longjmp works. Distribute pthreadGC.dll with your application. |
| |
| |
| Cygwin: (http://sourceware.cygnus.com/cygwin/) |
| Developers using Cygwin will not need pthreads-win32 since it has POSIX threads |
| support. Refer to its documentation for details and extent. |
| |
| |
| UWIN: |
| UWIN is a complete Unix-like environment for Windows from AT&T. Pthreads-win32 |
| doesn't currently support UWIN (and vice versa), but that may change in the |
| future. |
| |
| 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 |
| pthreadVCE.dll - built with MSVC++ compiler using C++ EH |
| pthreadVCE.lib |
| pthreadVC.dll - built with MSVC compiler using C setjmp/longjmp |
| pthreadVC.lib |
| pthreadVSE.dll - built with MSVC compiler using SEH |
| pthreadVSE.lib |
| pthreadGCE.dll - built with Mingw32 G++ 2.95.2-1 |
| pthreadGC.dll - built with Mingw32 GCC 2.95.2-1 using setjmp/longjmp |
| libpthreadGCE.a - derived from pthreadGCE.dll |
| libpthreadGC.a - derived from pthreadGC.dll |
| gcc.dll - needed if distributing applications that use |
| pthreadGCE.dll (but see the FAQ Q 10 for the latest |
| related information) |
| |
| 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. |
| |
| |
| Documentation |
| ------------- |
| |
| For the authoritative reference, see the online POSIX |
| standard reference at: |
| |
| http://www.OpenGroup.org |
| |
| 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) |
| |
| On the web: see the links at the bottom of the pthreads-win32 site: |
| |
| http://sources.redhat.com/pthreads-win32/ |
| |
| Currently, there is no documentation included in the package apart |
| from the copious comments in the source code. |
| |
| |
| |
| Enjoy! |
| |
| Ross Johnson |