1 /* PEAK Library
2  *
3  * Copyright (c) 2003
4  *      Stephane Thiell <mbuna@bugged.org>. All rights reserved.
5  *
6  * Redistribution and use in source and binary forms, with or without
7  * modification, are permitted provided that the following conditions
8  * are met:
9  *
10  * 1. Redistributions of source code must retain the above copyright
11  *    notice, this list of conditions and the following disclaimer.
12  *
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  *
17  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
18  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
19  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
20  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
21  * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
22  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
23  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
24  * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
25  * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26  * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
27  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28  *
29  * $Id: semaphore.h,v 1.4 2004/01/12 01:52:11 mbuna Exp $
30  */
31 #ifndef INCLUDED_PEAK_SEMAPHORE_H_
32 #define INCLUDED_PEAK_SEMAPHORE_H_
33 
34 /* This enables struct timespec on AIX and Linux.
35  */
36 #undef _POSIX_SOURCE
37 #define _POSIX_SOURCE 1
38 #undef _POSIX_C_SOURCE
39 #define _POSIX_C_SOURCE 199506L
40 #undef _XOPEN_SOURCE
41 #define _XOPEN_SOURCE 500
42 
43 #ifdef HAVE_CONFIG_H
44 #include "config.h"
45 #endif
46 #ifdef HAVE_MACH_SEMAPHORE_H
47 #include <mach/semaphore.h>
48 #endif
49 #ifdef TIME_WITH_SYS_TIME
50 #include <sys/time.h>
51 #endif
52 #include <time.h>
53 
54 #if defined(HAVE_SEMAPHORE_CREATE) && defined(HAVE_SEMAPHORE_SIGNAL)
55 #define PEAK_USE_MACH_SEMAPHORE
56 #endif
57 
58 #ifdef PEAK_USE_MACH_SEMAPHORE
59 typedef mach_timespec_t peak_timespec_t;
60 #else
61 typedef struct timespec peak_timespec_t;
62 #endif
63 
64 typedef struct __peak_semaphore * peak_semaphore;
65 
66 #if defined(__cplusplus)
67 extern "C" {
68 #endif
69 
70 extern peak_semaphore peak_semaphore_create(int value);
71 
72 extern int peak_semaphore_signal(peak_semaphore semaphore);
73 extern int peak_semaphore_signal_all(peak_semaphore semaphore);
74 extern int peak_semaphore_wait(peak_semaphore semaphore);
75 extern int peak_semaphore_timedwait(peak_semaphore semaphore,
76                                     peak_timespec_t wait_time);
77 extern int peak_semaphore_wait_signal(peak_semaphore wait_semaphore,
78                                       peak_semaphore signal_semaphore);
79 extern int peak_semaphore_timedwait_signal(peak_semaphore wait_semaphore,
80                                            peak_semaphore signal_semaphore,
81                                            peak_timespec_t wait_time);
82 
83 #if defined(__cplusplus)
84 }
85 #endif
86 
87 #endif /* INCLUDED_PEAK_SEMAPHORE_H_ */
88