⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pthread.h

📁 pthread source code,you can compile directly
💻 H
📖 第 1 页 / 共 3 页
字号:
/* 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,2005 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/* * See the README file for an explanation of the pthreads-win32 version * numbering scheme and how the DLL is named etc. */#define PTW32_VERSION 2,7,0,0#define PTW32_VERSION_STRING "2, 7, 0, 0\0"/* There are three implementations of cancel cleanup. * Note that pthread.h is included in both application * compilation units and also internally for the library. * The code here and within the library aims to work * for all reasonable combinations of environments. * * The three implementations are: * *   WIN32 SEH *   C *   C++ * * Please note that exiting a push/pop block via * "return", "exit", "break", or "continue" will * lead to different behaviour amongst applications * depending upon whether the library was built * using SEH, C++, or C. For example, a library built * with SEH will call the cleanup routine, while both * C++ and C built versions will not. *//* * Define defaults for cleanup code. * Note: Unless the build explicitly defines one of the following, then * we default to standard C style cleanup. This style uses setjmp/longjmp * in the cancelation and thread exit implementations and therefore won't * do stack unwinding if linked to applications that have it (e.g. * C++ apps). This is currently consistent with most/all commercial Unix * POSIX threads implementations. */#if !defined( __CLEANUP_SEH ) && !defined( __CLEANUP_CXX ) && !defined( __CLEANUP_C )# define __CLEANUP_C#endif#if defined( __CLEANUP_SEH ) && ( !defined( _MSC_VER ) && !defined(PTW32_RC_MSC))#error ERROR [__FILE__, line __LINE__]: SEH is not supported for this compiler.#endif/* * Stop here if we are being included by the resource compiler. */#ifndef RC_INVOKED#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@callisto.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)#define PTW32_INCLUDE_WINDOWS_H#endif#ifdef PTW32_INCLUDE_WINDOWS_H#include <windows.h>#endif#if defined(_MSC_VER) && _MSC_VER < 1300 || defined(__DMC__)/* * VC++6.0 or early compiler's header has no DWORD_PTR type. */typedef unsigned long DWORD_PTR;#endif/* * ----------------- * autoconf switches * ----------------- */#if HAVE_CONFIG_H#include "config.h"#endif /* HAVE_CONFIG_H */#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 some error numbers. */#ifndef ENOTSUP#  define ENOTSUP 48   /* This is the value in Solaris. */#endif#ifndef ETIMEDOUT#  define ETIMEDOUT 10060     /* This is the value in winsock.h. */#endif#ifndef ENOSYS#  define ENOSYS 140     /* Semi-arbitrary value */#endif#ifndef EDEADLK#  ifdef EDEADLOCK#    define EDEADLK EDEADLOCK#  else#    define EDEADLK 36     /* This is the value in MSVC. */#  endif#endif#include <sched.h>/* * To avoid including windows.h we define only those things that we * actually need from it. */#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#ifndef HAVE_STRUCT_TIMESPEC#define HAVE_STRUCT_TIMESPEC 1struct 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 * ========================= * * Options are normally set in <unistd.h>, which is not provided * with pthreads-win32. * * For conformance with the Single Unix Specification (version 3), all of the * options below are defined, and have a value of either -1 (not supported) * or 200112L (supported). * * These options can neither be left undefined nor have a value of 0, because * either indicates that sysconf(), which is not implemented, may be used at * runtime to check the status of the option. * * _POSIX_THREADS (== 200112L) *                      If == 200112L, you can use threads * * _POSIX_THREAD_ATTR_STACKSIZE (== 200112L) *                      If == 200112L, you can control the size of a thread's *                      stack *                              pthread_attr_getstacksize *                              pthread_attr_setstacksize * * _POSIX_THREAD_ATTR_STACKADDR (== -1) *                      If == 200112L, 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 (== -1) *                      If == 200112L, you can use realtime scheduling. *                      This option indicates that the behaviour of some *                      implemented functions conforms to the additional TPS *                      requirements in the standard. E.g. rwlocks favour *                      writers over readers when threads have equal priority. * * _POSIX_THREAD_PRIO_INHERIT (== -1) *                      If == 200112L, you can create priority inheritance *                      mutexes. *                              pthread_mutexattr_getprotocol + *                              pthread_mutexattr_setprotocol + * * _POSIX_THREAD_PRIO_PROTECT (== -1) *                      If == 200112L, 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 (== -1) *                      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 (== 200112L) *                      If == 200112L you can use the special *_r library *                      functions that provide thread-safe behaviour * * _POSIX_READER_WRITER_LOCKS (== 200112L) *                      If == 200112L, you can use read/write locks * * _POSIX_SPIN_LOCKS (== 200112L) *                      If == 200112L, you can use spin locks * * _POSIX_BARRIERS (== 200112L) *                      If == 200112L, you can use barriers * *      + These functions provide both 'inherit' and/or *        'protect' protocol, based upon these macro *        settings. * * ------------------------------------------------------------- *//* * POSIX Options */#undef _POSIX_THREADS#define _POSIX_THREADS 200112L#undef _POSIX_READER_WRITER_LOCKS#define _POSIX_READER_WRITER_LOCKS 200112L#undef _POSIX_SPIN_LOCKS#define _POSIX_SPIN_LOCKS 200112L#undef _POSIX_BARRIERS#define _POSIX_BARRIERS 200112L#undef _POSIX_THREAD_SAFE_FUNCTIONS#define _POSIX_THREAD_SAFE_FUNCTIONS 200112L#undef _POSIX_THREAD_ATTR_STACKSIZE#define _POSIX_THREAD_ATTR_STACKSIZE 200112L/* * The following options are not supported */#undef _POSIX_THREAD_ATTR_STACKADDR#define _POSIX_THREAD_ATTR_STACKADDR -1#undef _POSIX_THREAD_PRIO_INHERIT#define _POSIX_THREAD_PRIO_INHERIT -1#undef _POSIX_THREAD_PRIO_PROTECT#define _POSIX_THREAD_PRIO_PROTECT -1/* TPS is not fully supported.  */#undef _POSIX_THREAD_PRIORITY_SCHEDULING#define _POSIX_THREAD_PRIORITY_SCHEDULING -1#undef _POSIX_THREAD_PROCESS_SHARED#define _POSIX_THREAD_PROCESS_SHARED -1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -