# gthr.h

    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 */