1*062c5bc4SJason Schmidlapp /* 2*062c5bc4SJason Schmidlapp * Module: semaphore.h 3*062c5bc4SJason Schmidlapp * 4*062c5bc4SJason Schmidlapp * Purpose: 5*062c5bc4SJason Schmidlapp * Semaphores aren't actually part of the PThreads standard. 6*062c5bc4SJason Schmidlapp * They are defined by the POSIX Standard: 7*062c5bc4SJason Schmidlapp * 8*062c5bc4SJason Schmidlapp * POSIX 1003.1b-1993 (POSIX.1b) 9*062c5bc4SJason Schmidlapp * 10*062c5bc4SJason Schmidlapp * -------------------------------------------------------------------------- 11*062c5bc4SJason Schmidlapp * 12*062c5bc4SJason Schmidlapp * Pthreads-embedded (PTE) - POSIX Threads Library for embedded systems 13*062c5bc4SJason Schmidlapp * Copyright(C) 2008 Jason Schmidlapp 14*062c5bc4SJason Schmidlapp * 15*062c5bc4SJason Schmidlapp * Contact Email: jschmidlapp@users.sourceforge.net 16*062c5bc4SJason Schmidlapp * 17*062c5bc4SJason Schmidlapp * 18*062c5bc4SJason Schmidlapp * Pthreads-embedded (PTE) - POSIX Threads Library for embedded systems 19*062c5bc4SJason Schmidlapp * Copyright(C) 2008 Jason Schmidlapp 20*062c5bc4SJason Schmidlapp * 21*062c5bc4SJason Schmidlapp * Contact Email: jschmidlapp@users.sourceforge.net 22*062c5bc4SJason Schmidlapp * 23*062c5bc4SJason Schmidlapp * 24*062c5bc4SJason Schmidlapp * Based upon Pthreads-win32 - POSIX Threads Library for Win32 25*062c5bc4SJason Schmidlapp * Copyright(C) 1998 John E. Bossom 26*062c5bc4SJason Schmidlapp * Copyright(C) 1999,2005 Pthreads-win32 contributors 27*062c5bc4SJason Schmidlapp * 28*062c5bc4SJason Schmidlapp * Contact Email: rpj@callisto.canberra.edu.au 29*062c5bc4SJason Schmidlapp * 30*062c5bc4SJason Schmidlapp * The original list of contributors to the Pthreads-win32 project 31*062c5bc4SJason Schmidlapp * is contained in the file CONTRIBUTORS.ptw32 included with the 32*062c5bc4SJason Schmidlapp * source code distribution. The list can also be seen at the 33*062c5bc4SJason Schmidlapp * following World Wide Web location: 34*062c5bc4SJason Schmidlapp * http://sources.redhat.com/pthreads-win32/contributors.html 35*062c5bc4SJason Schmidlapp * 36*062c5bc4SJason Schmidlapp * This library is free software; you can redistribute it and/or 37*062c5bc4SJason Schmidlapp * modify it under the terms of the GNU Lesser General Public 38*062c5bc4SJason Schmidlapp * License as published by the Free Software Foundation; either 39*062c5bc4SJason Schmidlapp * version 2 of the License, or (at your option) any later version. 40*062c5bc4SJason Schmidlapp * 41*062c5bc4SJason Schmidlapp * This library is distributed in the hope that it will be useful, 42*062c5bc4SJason Schmidlapp * but WITHOUT ANY WARRANTY; without even the implied warranty of 43*062c5bc4SJason Schmidlapp * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 44*062c5bc4SJason Schmidlapp * Lesser General Public License for more details. 45*062c5bc4SJason Schmidlapp * 46*062c5bc4SJason Schmidlapp * You should have received a copy of the GNU Lesser General Public 47*062c5bc4SJason Schmidlapp * License along with this library in the file COPYING.LIB; 48*062c5bc4SJason Schmidlapp * if not, write to the Free Software Foundation, Inc., 49*062c5bc4SJason Schmidlapp * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA 50*062c5bc4SJason Schmidlapp */ 51*062c5bc4SJason Schmidlapp 52*062c5bc4SJason Schmidlapp #if !defined( SEMAPHORE_H ) 53*062c5bc4SJason Schmidlapp #define SEMAPHORE_H 54*062c5bc4SJason Schmidlapp 55*062c5bc4SJason Schmidlapp #if defined(_POSIX_SOURCE) 56*062c5bc4SJason Schmidlapp #define PTE_LEVEL 0 57*062c5bc4SJason Schmidlapp /* Early POSIX */ 58*062c5bc4SJason Schmidlapp #endif 59*062c5bc4SJason Schmidlapp 60*062c5bc4SJason Schmidlapp #if defined(INCLUDE_NP) 61*062c5bc4SJason Schmidlapp #undef PTE_LEVEL 62*062c5bc4SJason Schmidlapp #define PTE_LEVEL 2 63*062c5bc4SJason Schmidlapp /* Include Non-Portable extensions */ 64*062c5bc4SJason Schmidlapp #endif 65*062c5bc4SJason Schmidlapp 66*062c5bc4SJason Schmidlapp /* 67*062c5bc4SJason Schmidlapp * 68*062c5bc4SJason Schmidlapp */ 69*062c5bc4SJason Schmidlapp 70*062c5bc4SJason Schmidlapp #define _POSIX_SEMAPHORES 71*062c5bc4SJason Schmidlapp 72*062c5bc4SJason Schmidlapp #ifdef __cplusplus 73*062c5bc4SJason Schmidlapp extern "C" 74*062c5bc4SJason Schmidlapp { 75*062c5bc4SJason Schmidlapp #endif /* __cplusplus */ 76*062c5bc4SJason Schmidlapp 77*062c5bc4SJason Schmidlapp 78*062c5bc4SJason Schmidlapp typedef struct sem_t_ * sem_t; 79*062c5bc4SJason Schmidlapp 80*062c5bc4SJason Schmidlapp int sem_init (sem_t * sem, 81*062c5bc4SJason Schmidlapp int pshared, 82*062c5bc4SJason Schmidlapp unsigned int value); 83*062c5bc4SJason Schmidlapp 84*062c5bc4SJason Schmidlapp int sem_destroy (sem_t * sem); 85*062c5bc4SJason Schmidlapp 86*062c5bc4SJason Schmidlapp int sem_trywait (sem_t * sem); 87*062c5bc4SJason Schmidlapp 88*062c5bc4SJason Schmidlapp int sem_wait (sem_t * sem); 89*062c5bc4SJason Schmidlapp 90*062c5bc4SJason Schmidlapp int sem_timedwait (sem_t * sem, 91*062c5bc4SJason Schmidlapp const struct timespec * abstime); 92*062c5bc4SJason Schmidlapp 93*062c5bc4SJason Schmidlapp int sem_post (sem_t * sem); 94*062c5bc4SJason Schmidlapp 95*062c5bc4SJason Schmidlapp int sem_post_multiple (sem_t * sem, 96*062c5bc4SJason Schmidlapp int count); 97*062c5bc4SJason Schmidlapp 98*062c5bc4SJason Schmidlapp int sem_open (const char * name, 99*062c5bc4SJason Schmidlapp int oflag, 100*062c5bc4SJason Schmidlapp mode_t mode, 101*062c5bc4SJason Schmidlapp unsigned int value); 102*062c5bc4SJason Schmidlapp 103*062c5bc4SJason Schmidlapp int sem_close (sem_t * sem); 104*062c5bc4SJason Schmidlapp 105*062c5bc4SJason Schmidlapp int sem_unlink (const char * name); 106*062c5bc4SJason Schmidlapp 107*062c5bc4SJason Schmidlapp int sem_getvalue (sem_t * sem, 108*062c5bc4SJason Schmidlapp int * sval); 109*062c5bc4SJason Schmidlapp 110*062c5bc4SJason Schmidlapp #ifdef __cplusplus 111*062c5bc4SJason Schmidlapp } /* End of extern "C" */ 112*062c5bc4SJason Schmidlapp #endif /* __cplusplus */ 113*062c5bc4SJason Schmidlapp 114*062c5bc4SJason Schmidlapp #endif /* !SEMAPHORE_H */ 115