gthr.h

Go to the documentation of this file.
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 */

Generated on Tue Jan 30 17:31:49 2007 for GNU C++ STL by doxygen 1.3.6