POSIX Threads for Windows Wiki
An implementation of the POSIX threads API for Windows
Brought to you by:
rosspjohnson
The following POSIX options are defined and set to 200809L: _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 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 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_mutexattr_getrobust pthread_mutexattr_setrobust (values: PTHREAD_MUTEX_STALLED PTHREAD_MUTEX_ROBUST) pthread_mutex_init pthread_mutex_destroy pthread_mutex_lock pthread_mutex_trylock pthread_mutex_timedlock pthread_mutex_unlock pthread_mutex_consistent --------------------------- 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_getaffinity sched_setaffinity 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 or HTML manual pages for usage.) pthread_attr_getname_np pthread_attr_setname_np pthread_getname_np pthread_setname_np pthread_timedjoin_np pthread_tryjoin_np pthread_getw32threadhandle_np pthread_timechange_handler_np pthread_delay_np pthread_getunique_np pthread_attr_getaffinity_np pthread_attr_setaffinity_np pthread_getaffinity_np pthread_setaffinity_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_getabstime_np (The following four routines may be required when linking statically. The process_* routines should not be needed for MSVC or GCC.) pthread_win32_process_attach_np pthread_win32_process_detach_np (The following routines should only be needed to manage implicit POSIX handles i.e. when Win native threads call POSIX thread routines (other than pthread_create)) pthread_win32_thread_attach_np pthread_win32_thread_detach_np --------------------------- 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 --------------------------- CPU Affinity Mask Support --------------------------- CPU_ZERO CPU_EQUAL CPU_COUNT CPU_SET CPU_CLR CPU_ISSET CPU_AND CPU_OR CPU_XOR The library includes two non-API functions for creating cancellation points in applications and libraries: pthreadCancelableWait pthreadCancelableTimedWait 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 --------------------------- Thread-Safe C Runtime Library (macros) --------------------------- strtok_r asctime_r ctime_r gmtime_r localtime_r rand_r