00001 /* Threads compatibility routines for libgcc2. */ 00002 /* Compile this one with gcc. */ 00003 /* Copyright (C) 1997, 1998 Free Software Foundation, Inc. 00004 00005 This file is part of GCC. 00006 00007 GCC is free software; you can redistribute it and/or modify it under 00008 the terms of the GNU General Public License as published by the Free 00009 Software Foundation; either version 2, or (at your option) any later 00010 version. 00011 00012 GCC is distributed in the hope that it will be useful, but WITHOUT ANY 00013 WARRANTY; without even the implied warranty of MERCHANTABILITY or 00014 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 00015 for more details. 00016 00017 You should have received a copy of the GNU General Public License 00018 along with GCC; see the file COPYING. If not, write to the Free 00019 Software Foundation, 59 Temple Place - Suite 330, Boston, MA 00020 02111-1307, USA. */ 00021 00022 /* As a special exception, if you link this library with other files, 00023 some of which are compiled with GCC, to produce an executable, 00024 this library does not by itself cause the resulting executable 00025 to be covered by the GNU General Public License. 00026 This exception does not however invalidate any other reasons why 00027 the executable file might be covered by the GNU General Public License. */ 00028 00029 #ifndef _GLIBCXX_GCC_GTHR_H 00030 #define _GLIBCXX_GCC_GTHR_H 00031 00032 /* If this file is compiled with threads support, it must 00033 #define __GTHREADS 1 00034 to indicate that threads support is present. Also it has define 00035 function 00036 int __gthread_active_p () 00037 that returns 1 if thread system is active, 0 if not. 00038 00039 The threads interface must define the following types: 00040 __gthread_key_t 00041 __gthread_once_t 00042 __gthread_mutex_t 00043 00044 The threads interface must define the following macros: 00045 00046 __GTHREAD_ONCE_INIT 00047 to initialize __gthread_once_t 00048 __GTHREAD_MUTEX_INIT 00049 to initialize __gthread_mutex_t to get a fast 00050 non-recursive mutex. 00051 __GTHREAD_MUTEX_INIT_FUNCTION 00052 some systems can't initialize a mutex without a 00053 function call. On such systems, define this to a 00054 function which looks like this: 00055 void __GTHREAD_MUTEX_INIT_FUNCTION (__gthread_mutex_t *) 00056 Don't define __GTHREAD_MUTEX_INIT in this case 00057 00058 The threads interface must define the following static functions: 00059 00060 int __gthread_once (__gthread_once_t *once, void (*func) ()) 00061 00062 int __gthread_key_create (__gthread_key_t *keyp, void (*dtor) (void *)) 00063 int __gthread_key_delete (__gthread_key_t key) 00064 00065 void *__gthread_getspecific (__gthread_key_t key) 00066 int __gthread_setspecific (__gthread_key_t key, const void *ptr) 00067 00068 int __gthread_mutex_lock (__gthread_mutex_t *mutex); 00069 int __gthread_mutex_trylock (__gthread_mutex_t *mutex); 00070 int __gthread_mutex_unlock (__gthread_mutex_t *mutex); 00071 00072 All functions returning int should return zero on success or the error 00073 number. If the operation is not supported, -1 is returned. 00074 00075 Currently supported threads packages are 00076 POSIX threads with -D_PTHREADS 00077 DCE threads with -D_DCE_THREADS 00078 Solaris/UI threads with -D_SOLARIS_THREADS 00079 */ 00080 00081 /* Check first for thread specific defines. */ 00082 #if _GLIBCXX__PTHREADS 00083 #include <bits/gthr-posix.h> 00084 #elif _GLIBCXX__DCE_THREADS 00085 #include <bits/gthr-dce.h> 00086 #elif _GLIBCXX__SOLARIS_THREADS 00087 #include <bits/gthr-solaris.h> 00088 00089 /* Include GTHREAD_FILE if one is defined. */ 00090 #elif defined(_GLIBCXX_HAVE_GTHR_DEFAULT) 00091 #if __GXX_WEAK__ 00092 #ifndef _GLIBCXX_GTHREAD_USE_WEAK 00093 #define _GLIBCXX_GTHREAD_USE_WEAK 1 00094 #endif 00095 #endif 00096 #include <bits/gthr-default.h> 00097 00098 /* Fallback to single thread definitions. */ 00099 #else 00100 #include <bits/gthr-single.h> 00101 #endif 00102 00103 #endif /* ! _GLIBCXX_GCC_GTHR_H */