config/posix/sem.h

Go to the documentation of this file.
00001 /* Copyright (C) 2005, 2006, 2009 Free Software Foundation, Inc.
00002    Contributed by Richard Henderson <rth@redhat.com>.
00003 
00004    This file is part of the GNU OpenMP Library (libgomp).
00005 
00006    Libgomp is free software; you can redistribute it and/or modify it
00007    under the terms of the GNU General Public License as published by
00008    the Free Software Foundation; either version 3, or (at your option)
00009    any later version.
00010 
00011    Libgomp is distributed in the hope that it will be useful, but WITHOUT ANY
00012    WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00013    FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
00014    more details.
00015 
00016    Under Section 7 of GPL version 3, you are granted additional
00017    permissions described in the GCC Runtime Library Exception, version
00018    3.1, as published by the Free Software Foundation.
00019 
00020    You should have received a copy of the GNU General Public License and
00021    a copy of the GCC Runtime Library Exception along with this program;
00022    see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
00023    <http://www.gnu.org/licenses/>.  */
00024 
00025 /* This is the default POSIX 1003.1b implementation of a semaphore
00026    synchronization mechanism for libgomp.  This type is private to
00027    the library.
00028 
00029    This is a bit heavy weight for what we need, in that we're not
00030    interested in sem_wait as a cancelation point, but it's not too
00031    bad for a default.  */
00032 
00033 #ifndef GOMP_SEM_H
00034 #define GOMP_SEM_H 1
00035 
00036 #ifdef HAVE_ATTRIBUTE_VISIBILITY
00037 # pragma GCC visibility push(default)
00038 #endif
00039 
00040 #include <semaphore.h>
00041 
00042 #ifdef HAVE_ATTRIBUTE_VISIBILITY
00043 # pragma GCC visibility pop
00044 #endif
00045 
00046 #ifdef HAVE_BROKEN_POSIX_SEMAPHORES
00047 #include <pthread.h>
00048 
00049 struct gomp_sem
00050 {
00051   pthread_mutex_t   mutex;
00052   pthread_cond_t    cond;
00053   int           value;
00054 };
00055 
00056 typedef struct gomp_sem gomp_sem_t;
00057 
00058 extern void gomp_sem_init (gomp_sem_t *sem, int value);
00059 
00060 extern void gomp_sem_wait (gomp_sem_t *sem);
00061 
00062 extern void gomp_sem_post (gomp_sem_t *sem);
00063 
00064 extern void gomp_sem_destroy (gomp_sem_t *sem);
00065 
00066 #else /* HAVE_BROKEN_POSIX_SEMAPHORES  */
00067 
00068 typedef sem_t gomp_sem_t;
00069 
00070 static inline void gomp_sem_init (gomp_sem_t *sem, int value)
00071 {
00072   sem_init (sem, 0, value);
00073 }
00074 
00075 extern void gomp_sem_wait (gomp_sem_t *sem);
00076 
00077 static inline void gomp_sem_post (gomp_sem_t *sem)
00078 {
00079   sem_post (sem);
00080 }
00081 
00082 static inline void gomp_sem_destroy (gomp_sem_t *sem)
00083 {
00084   sem_destroy (sem);
00085 }
00086 #endif /* doesn't HAVE_BROKEN_POSIX_SEMAPHORES  */
00087 #endif /* GOMP_SEM_H  */

Generated on Fri Apr 5 05:38:09 2013 for Libgomp by  doxygen 1.4.7