[1046] | 1 | /*
|
---|
| 2 | * Module: semaphore.h
|
---|
| 3 | *
|
---|
| 4 | * Purpose:
|
---|
| 5 | * Semaphores aren't actually part of the PThreads standard.
|
---|
| 6 | * They are defined by the POSIX Standard:
|
---|
| 7 | *
|
---|
| 8 | * POSIX 1003.1b-1993 (POSIX.1b)
|
---|
| 9 | *
|
---|
| 10 | * --------------------------------------------------------------------------
|
---|
| 11 | *
|
---|
| 12 | * Pthreads-win32 - POSIX Threads Library for Win32
|
---|
| 13 | * Copyright(C) 1998 John E. Bossom
|
---|
| 14 | * Copyright(C) 1999-2012, 2016, Pthreads-win32 contributors
|
---|
| 15 | *
|
---|
| 16 | * Homepage1: http://sourceware.org/pthreads-win32/
|
---|
| 17 | * Homepage2: http://sourceforge.net/projects/pthreads4w/
|
---|
| 18 | *
|
---|
| 19 | * The current list of contributors is contained
|
---|
| 20 | * in the file CONTRIBUTORS included with the source
|
---|
| 21 | * code distribution. The list can also be seen at the
|
---|
| 22 | * following World Wide Web location:
|
---|
| 23 | * http://sources.redhat.com/pthreads-win32/contributors.html
|
---|
| 24 | *
|
---|
| 25 | * This library is free software; you can redistribute it and/or
|
---|
| 26 | * modify it under the terms of the GNU Lesser General Public
|
---|
| 27 | * License as published by the Free Software Foundation; either
|
---|
| 28 | * version 2 of the License, or (at your option) any later version.
|
---|
| 29 | *
|
---|
| 30 | * This library is distributed in the hope that it will be useful,
|
---|
| 31 | * but WITHOUT ANY WARRANTY; without even the implied warranty of
|
---|
| 32 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
---|
| 33 | * Lesser General Public License for more details.
|
---|
| 34 | *
|
---|
| 35 | * You should have received a copy of the GNU Lesser General Public
|
---|
| 36 | * License along with this library in the file COPYING.LIB;
|
---|
| 37 | * if not, write to the Free Software Foundation, Inc.,
|
---|
| 38 | * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
---|
| 39 | */
|
---|
| 40 | #ifndef _SEMAPHORE_H
|
---|
| 41 | #define _SEMAPHORE_H
|
---|
| 42 |
|
---|
| 43 | /* FIXME: POSIX.1 says that _POSIX_SEMAPHORES should be defined
|
---|
| 44 | * in <unistd.h>, not here; for later POSIX.1 versions, its value
|
---|
| 45 | * should match the corresponding _POSIX_VERSION number, but in
|
---|
| 46 | * the case of POSIX.1b-1993, the value is unspecified.
|
---|
| 47 | *
|
---|
| 48 | * Notwithstanding the above, since POSIX semaphores, (and indeed
|
---|
| 49 | * having any <unistd.h> to #include), are not a standard feature
|
---|
| 50 | * on MS-Windows, it is convenient to retain this definition here;
|
---|
| 51 | * we may consider adding a hook, to make it selectively available
|
---|
| 52 | * for inclusion by <unistd.h>, in those cases (e.g. MinGW) where
|
---|
| 53 | * <unistd.h> is provided.
|
---|
| 54 | */
|
---|
| 55 | #define _POSIX_SEMAPHORES
|
---|
| 56 |
|
---|
| 57 | /* Internal macros, common to the public interfaces for various
|
---|
| 58 | * pthreads-win32 components, are defined in <_ptw32.h>; we must
|
---|
| 59 | * include them here.
|
---|
| 60 | */
|
---|
| 61 | #include <_ptw32.h>
|
---|
| 62 |
|
---|
| 63 | /* The sem_timedwait() function was added in POSIX.1-2001; it
|
---|
| 64 | * requires struct timespec to be defined, at least as a partial
|
---|
| 65 | * (a.k.a. incomplete) data type. Forward declare it as such.
|
---|
| 66 | */
|
---|
| 67 | struct timespec;
|
---|
| 68 |
|
---|
| 69 | /* The data type used to represent our semaphore implementation,
|
---|
| 70 | * as required by POSIX.1; FIXME: consider renaming the underlying
|
---|
| 71 | * structure tag, to avoid possible pollution of user namespace.
|
---|
| 72 | */
|
---|
| 73 | typedef struct sem_t_ * sem_t;
|
---|
| 74 |
|
---|
| 75 | /* POSIX.1b (and later) mandates SEM_FAILED as the value to be
|
---|
| 76 | * returned on failure of sem_open(); (our implementation is a
|
---|
| 77 | * stub, which will always return this).
|
---|
| 78 | */
|
---|
| 79 | #define SEM_FAILED (sem_t *)(-1)
|
---|
| 80 |
|
---|
| 81 | __PTW32_BEGIN_C_DECLS
|
---|
| 82 |
|
---|
| 83 | /* Function prototypes: some are implemented as stubs, which
|
---|
| 84 | * always fail; (FIXME: identify them).
|
---|
| 85 | */
|
---|
| 86 | __PTW32_DECLSPEC int sem_init (sem_t * sem, int pshared, unsigned int value);
|
---|
| 87 | __PTW32_DECLSPEC int sem_destroy (sem_t * sem);
|
---|
| 88 | __PTW32_DECLSPEC int sem_trywait (sem_t * sem);
|
---|
| 89 | __PTW32_DECLSPEC int sem_wait (sem_t * sem);
|
---|
| 90 | __PTW32_DECLSPEC int sem_timedwait (sem_t * sem, const struct timespec * abstime);
|
---|
| 91 | __PTW32_DECLSPEC int sem_post (sem_t * sem);
|
---|
| 92 | __PTW32_DECLSPEC int sem_post_multiple (sem_t * sem, int count);
|
---|
| 93 | __PTW32_DECLSPEC sem_t *sem_open (const char *, int, ...);
|
---|
| 94 | __PTW32_DECLSPEC int sem_close (sem_t * sem);
|
---|
| 95 | __PTW32_DECLSPEC int sem_unlink (const char * name);
|
---|
| 96 | __PTW32_DECLSPEC int sem_getvalue (sem_t * sem, int * sval);
|
---|
| 97 |
|
---|
| 98 | __PTW32_END_C_DECLS
|
---|
| 99 |
|
---|
| 100 | #endif /* !_SEMAPHORE_H */
|
---|