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 __gthread_recursive_mutex_t 00044 00045 The threads interface must define the following macros: 00046 00047 __GTHREAD_ONCE_INIT 00048 to initialize __gthread_once_t 00049 __GTHREAD_MUTEX_INIT 00050 to initialize __gthread_mutex_t to get a fast 00051 non-recursive mutex. 00052 __GTHREAD_MUTEX_INIT_FUNCTION 00053 some systems can't initialize a mutex without a 00054 function call. On such systems, define this to a 00055 function which looks like this: 00056 void __GTHREAD_MUTEX_INIT_FUNCTION (__gthread_mutex_t *) 00057 Don't define __GTHREAD_MUTEX_INIT in this case 00058 __GTHREAD_RECURSIVE_MUTEX_INIT 00059 __GTHREAD_RECURSIVE_MUTEX_INIT_FUNCTION 00060 as above, but for a recursive mutex. 00061 00062 The threads interface must define the following static functions: 00063 00064 int __gthread_once (__gthread_once_t *once, void (*func) ()) 00065 00066 int __gthread_key_create (__gthread_key_t *keyp, void (*dtor) (void *)) 00067 int __gthread_key_delete (__gthread_key_t key) 00068 00069 void *__gthread_getspecific (__gthread_key_t key) 00070 int __gthread_setspecific (__gthread_key_t key, const void *ptr) 00071 00072 int __gthread_mutex_lock (__gthread_mutex_t *mutex); 00073 int __gthread_mutex_trylock (__gthread_mutex_t *mutex); 00074 int __gthread_mutex_unlock (__gthread_mutex_t *mutex); 00075 00076 int __gthread_recursive_mutex_lock (__gthread_recursive_mutex_t *mutex); 00077 int __gthread_recursive_mutex_trylock (__gthread_recursive_mutex_t *mutex); 00078 int __gthread_recursive_mutex_unlock (__gthread_recursive_mutex_t *mutex); 00079 00080 All functions returning int should return zero on success or the error 00081 number. If the operation is not supported, -1 is returned. 00082 00083 Currently supported threads packages are 00084 POSIX threads with -D_PTHREADS 00085 DCE threads with -D_DCE_THREADS 00086 Solaris/UI threads with -D_SOLARIS_THREADS 00087 */ 00088 00089 /* Check first for thread specific defines. */ 00090 #if _GLIBCXX__PTHREADS 00091 #include <bits/gthr-posix.h> 00092 #elif _GLIBCXX__DCE_THREADS 00093 #include <bits/gthr-dce.h> 00094 #elif _GLIBCXX__SOLARIS_THREADS 00095 #include <bits/gthr-solaris.h> 00096 00097 /* Include GTHREAD_FILE if one is defined. */ 00098 #elif defined(_GLIBCXX_HAVE_GTHR_DEFAULT) 00099 #if __GXX_WEAK__ 00100 #ifndef _GLIBCXX_GTHREAD_USE_WEAK 00101 #define _GLIBCXX_GTHREAD_USE_WEAK 1 00102 #endif 00103 #endif 00104 #include <bits/gthr-default.h> 00105 00106 /* Fallback to single thread definitions. */ 00107 #else 00108 #include <bits/gthr-single.h> 00109 #endif 00110 00111 #endif /* ! _GLIBCXX_GCC_GTHR_H */