📄 pthread.h
字号:
/* This is an implementation of the threads API of POSIX 1003.1-2001. * * -------------------------------------------------------------------------- * * Pthreads-win32 - POSIX Threads Library for Win32 * Copyright(C) 1998 John E. Bossom * Copyright(C) 1999,2003 Pthreads-win32 contributors * * Contact Email: rpj@callisto.canberra.edu.au * * The current list of contributors is contained * in the file CONTRIBUTORS included with the source * code distribution. The list can also be seen at the * following World Wide Web location: * http://sources.redhat.com/pthreads-win32/contributors.html * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library in the file COPYING.LIB; * if not, write to the Free Software Foundation, Inc., * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA */#if !defined( PTHREAD_H )#define PTHREAD_H#undef PTW32_LEVEL#if defined(_POSIX_SOURCE)#define PTW32_LEVEL 0/* Early POSIX */#endif#if defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE >= 199309#undef PTW32_LEVEL#define PTW32_LEVEL 1/* Include 1b, 1c and 1d */#endif#if defined(INCLUDE_NP)#undef PTW32_LEVEL#define PTW32_LEVEL 2/* Include Non-Portable extensions */#endif#define PTW32_LEVEL_MAX 3#if !defined(PTW32_LEVEL)#define PTW32_LEVEL PTW32_LEVEL_MAX/* Include everything */#endif#ifdef _UWIN# define HAVE_STRUCT_TIMESPEC 1# define HAVE_SIGNAL_H 1# undef HAVE_CONFIG_H# pragma comment(lib, "pthread")#endif/* * ------------------------------------------------------------- * * * Module: pthread.h * * Purpose: * Provides an implementation of PThreads based upon the * standard: * * POSIX 1003.1-2001 * and * The Single Unix Specification version 3 * * (these two are equivalent) * * in order to enhance code portability between Windows, * various commercial Unix implementations, and Linux. * * See the ANNOUNCE file for a full list of conforming * routines and defined constants, and a list of missing * routines and constants not defined in this implementation. * * Authors: * There have been many contributors to this library. * The initial implementation was contributed by * John Bossom, and several others have provided major * sections or revisions of parts of the implementation. * Often significant effort has been contributed to * find and fix important bugs and other problems to * improve the reliability of the library, which sometimes * is not reflected in the amount of code which changed as * result. * As much as possible, the contributors are acknowledged * in the ChangeLog file in the source code distribution * where their changes are noted in detail. * * Contributors are listed in the CONTRIBUTORS file. * * As usual, all bouquets go to the contributors, and all * brickbats go to the project maintainer. * * Maintainer: * The code base for this project is coordinated and * eventually pre-tested, packaged, and made available by * * Ross Johnson <rpj@ise.canberra.edu.au> * * QA Testers: * Ultimately, the library is tested in the real world by * a host of competent and demanding scientists and * engineers who report bugs and/or provide solutions * which are then fixed or incorporated into subsequent * versions of the library. Each time a bug is fixed, a * test case is written to prove the fix and ensure * that later changes to the code don't reintroduce the * same error. The number of test cases is slowly growing * and therefore so is the code reliability. * * Compliance: * See the file ANNOUNCE for the list of implemented * and not-implemented routines and defined options. * Of course, these are all defined is this file as well. * * Web site: * The source code and other information about this library * are available from * * http://sources.redhat.com/pthreads-win32/ * * ------------------------------------------------------------- *//* Try to avoid including windows.h */#if defined(__MINGW32__) && defined(__cplusplus)/* * FIXME: The pthreadGCE.dll build gets linker unresolved errors * on pthread_key_create() unless windows.h is included here. * It appears to have something to do with an argument type mismatch. * Looking at tsd.o with 'nm' shows this line: * 00000000 T _pthread_key_create__FPP14pthread_key_t_PFPv_v * instead of * 00000000 T _pthread_key_create */#define PTW32_INCLUDE_WINDOWS_H#endif#ifdef PTW32_INCLUDE_WINDOWS_H#include <windows.h>#endif/* * ----------------- * autoconf switches * ----------------- */#if HAVE_CONFIG_H#include "config.h"#endif /* HAVE_CONFIG_H */#if PTW32_LEVEL >= PTW32_LEVEL_MAX/* Try to avoid including windows.h */#if defined(__MINGW32__) && defined(__cplusplus)/* * FIXME: The pthreadGCE.dll build gets linker unresolved errors * on pthread_key_create() unless windows.h is included here. * It appears to have something to do with an argument type mismatch. * Looking at tsd.o with 'nm' shows this line: * 00000000 T _pthread_key_create__FPP14pthread_key_t_PFPv_v * instead of * 00000000 T _pthread_key_create */#define PTW32_INCLUDE_WINDOWS_H#endif#ifdef PTW32_INCLUDE_WINDOWS_H#include <windows.h>#endif#ifndef NEED_FTIME#include <time.h>#else /* NEED_FTIME *//* use native WIN32 time API */#endif /* NEED_FTIME */#if HAVE_SIGNAL_H#include <signal.h>#endif /* HAVE_SIGNAL_H */#include <setjmp.h>#include <limits.h>/* * Boolean values to make us independent of system includes. */enum { PTW32_FALSE = 0, PTW32_TRUE = (! PTW32_FALSE)};/* * This is a duplicate of what is in the autoconf config.h, * which is only used when building the pthread-win32 libraries. */#ifndef PTW32_CONFIG_H# if defined(WINCE)# define NEED_ERRNO# define NEED_SEM# endif# if defined(_UWIN) || defined(__MINGW32__)# define HAVE_MODE_T# endif#endif/* * */#if PTW32_LEVEL >= PTW32_LEVEL_MAX#ifdef NEED_ERRNO#include "need_errno.h"#else#include <errno.h>#endif#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX *//* * Several systems don't define ENOTSUP. If not, we use * the same value as Solaris. */#ifndef ENOTSUP# define ENOTSUP 48#endif#ifndef ETIMEDOUT# define ETIMEDOUT 10060 /* This is the value in winsock.h. */#endif#include <sched.h>/* * To avoid including windows.h we define only those things that we * actually need from it. I don't like the potential incompatibility that * this creates with future versions of windows. */#ifndef PTW32_INCLUDE_WINDOWS_H#ifndef HANDLE# define PTW32__HANDLE_DEF# define HANDLE void *#endif#ifndef DWORD# define PTW32__DWORD_DEF# define DWORD unsigned long#endif#endif#endif /* PTW32_LEVEL >= PTW32_LEVEL_MAX */#ifndef HAVE_STRUCT_TIMESPECstruct timespec { long tv_sec; long tv_nsec;};#endif /* HAVE_STRUCT_TIMESPEC */#ifndef SIG_BLOCK#define SIG_BLOCK 0#endif /* SIG_BLOCK */#ifndef SIG_UNBLOCK #define SIG_UNBLOCK 1#endif /* SIG_UNBLOCK */#ifndef SIG_SETMASK#define SIG_SETMASK 2#endif /* SIG_SETMASK */#ifdef __cplusplusextern "C"{#endif /* __cplusplus *//* * ------------------------------------------------------------- * * POSIX 1003.1-2001 Options * ========================= * * _POSIX_THREADS (set) * If set, you can use threads * * _POSIX_THREAD_ATTR_STACKSIZE (set) * If set, you can control the size of a thread's * stack * pthread_attr_getstacksize * pthread_attr_setstacksize * * _POSIX_THREAD_ATTR_STACKADDR (not set) * If set, you can allocate and control a thread's * stack. If not supported, the following functions * will return ENOSYS, indicating they are not * supported: * pthread_attr_getstackaddr * pthread_attr_setstackaddr * * _POSIX_THREAD_PRIORITY_SCHEDULING (set) * If set, you can use realtime scheduling. * Indicates the availability of: * pthread_attr_getinheritsched * pthread_attr_getschedparam * pthread_attr_getschedpolicy * pthread_attr_getscope * pthread_attr_setinheritsched * pthread_attr_setschedparam * pthread_attr_setschedpolicy * pthread_attr_setscope * pthread_getschedparam * pthread_setschedparam * sched_get_priority_max * sched_get_priority_min * sched_rr_set_interval * * _POSIX_THREAD_PRIO_INHERIT (not set) * If set, you can create priority inheritance * mutexes. * pthread_mutexattr_getprotocol + * pthread_mutexattr_setprotocol + * * _POSIX_THREAD_PRIO_PROTECT (not set) * If set, you can create priority ceiling mutexes * Indicates the availability of: * pthread_mutex_getprioceiling * pthread_mutex_setprioceiling * pthread_mutexattr_getprioceiling * pthread_mutexattr_getprotocol + * pthread_mutexattr_setprioceiling * pthread_mutexattr_setprotocol + * * _POSIX_THREAD_PROCESS_SHARED (not set) * If set, you can create mutexes and condition * variables that can be shared with another * process.If set, indicates the availability * of: * pthread_mutexattr_getpshared * pthread_mutexattr_setpshared * pthread_condattr_getpshared * pthread_condattr_setpshared * * _POSIX_THREAD_SAFE_FUNCTIONS (set) * If set you can use the special *_r library * functions that provide thread-safe behaviour * * _POSIX_READER_WRITER_LOCKS (set) * If set, you can use read/write locks * * _POSIX_SPIN_LOCKS (set) * If set, you can use spin locks * * _POSIX_BARRIERS (set) * If set, you can use barriers * * + These functions provide both 'inherit' and/or * 'protect' protocol, based upon these macro * settings. * * POSIX 1003.1-2001 Limits * =========================== * * PTHREAD_DESTRUCTOR_ITERATIONS * Maximum number of attempts to destroy * a thread's thread-specific data on * termination (must be at least 4) * * PTHREAD_KEYS_MAX * Maximum number of thread-specific data keys * available per process (must be at least 128) * * PTHREAD_STACK_MIN * Minimum supported stack size for a thread * * PTHREAD_THREADS_MAX * Maximum number of threads supported per * process (must be at least 64). * * _POSIX_SEM_NSEMS_MAX * The maximum number of semaphores a process can have. * (only defined if not already defined) * * _POSIX_SEM_VALUE_MAX * The maximum value a semaphore can have. * (only defined if not already defined) * * ------------------------------------------------------------- *//* * POSIX Options */#ifndef _POSIX_THREADS#define _POSIX_THREADS#endif#ifndef _POSIX_READER_WRITER_LOCKS#define _POSIX_READER_WRITER_LOCKS#endif#ifndef _POSIX_SPIN_LOCKS#define _POSIX_SPIN_LOCKS#endif#ifndef _POSIX_BARRIERS#define _POSIX_BARRIERS#endif#define _POSIX_THREAD_SAFE_FUNCTIONS#define _POSIX_THREAD_ATTR_STACKSIZE#define _POSIX_THREAD_PRIORITY_SCHEDULING
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -