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