Zycore  1.2.0.0
Synchronization.h
Go to the documentation of this file.
1 /***************************************************************************************************
2 
3  Zyan Core Library (Zycore-C)
4 
5  Original Author : Florian Bernd
6 
7  * Permission is hereby granted, free of charge, to any person obtaining a copy
8  * of this software and associated documentation files (the "Software"), to deal
9  * in the Software without restriction, including without limitation the rights
10  * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
11  * copies of the Software, and to permit persons to whom the Software is
12  * furnished to do so, subject to the following conditions:
13  *
14  * The above copyright notice and this permission notice shall be included in all
15  * copies or substantial portions of the Software.
16  *
17  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23  * SOFTWARE.
24 
25 ***************************************************************************************************/
26 
32 #ifndef ZYCORE_API_SYNCHRONIZATION_H
33 #define ZYCORE_API_SYNCHRONIZATION_H
34 
35 #include <Zycore/Defines.h>
36 #include <Zycore/Status.h>
37 
38 #ifndef ZYAN_NO_LIBC
39 
40 #ifdef __cplusplus
41 extern "C" {
42 #endif
43 
44 /* ============================================================================================== */
45 /* Enums and types */
46 /* ============================================================================================== */
47 
48 #if defined(ZYAN_POSIX)
49 
50 #include <pthread.h>
51 
52 /* ---------------------------------------------------------------------------------------------- */
53 /* Critical Section */
54 /* ---------------------------------------------------------------------------------------------- */
55 
56 typedef pthread_mutex_t ZyanCriticalSection;
57 
58 /* ---------------------------------------------------------------------------------------------- */
59 
60 #elif defined(ZYAN_WINDOWS)
61 
62 #include <windows.h>
63 
64 /* ---------------------------------------------------------------------------------------------- */
65 /* Critical Section */
66 /* ---------------------------------------------------------------------------------------------- */
67 
68 typedef CRITICAL_SECTION ZyanCriticalSection;
69 
70 /* ---------------------------------------------------------------------------------------------- */
71 
72 #else
73 # error "Unsupported platform detected"
74 #endif
75 
76 /* ============================================================================================== */
77 /* Exported functions */
78 /* ============================================================================================== */
79 
80 /* ---------------------------------------------------------------------------------------------- */
81 /* Critical Section */
82 /* ---------------------------------------------------------------------------------------------- */
83 
89 ZYCORE_EXPORT ZyanStatus ZyanCriticalSectionInitialize(ZyanCriticalSection* critical_section);
90 
96 ZYCORE_EXPORT ZyanStatus ZyanCriticalSectionEnter(ZyanCriticalSection* critical_section);
97 
106 ZYCORE_EXPORT ZyanBool ZyanCriticalSectionTryEnter(ZyanCriticalSection* critical_section);
107 
113 ZYCORE_EXPORT ZyanStatus ZyanCriticalSectionLeave(ZyanCriticalSection* critical_section);
114 
120 ZYCORE_EXPORT ZyanStatus ZyanCriticalSectionDelete(ZyanCriticalSection* critical_section);
121 
122 /* ---------------------------------------------------------------------------------------------- */
123 
124 /* ============================================================================================== */
125 
126 #ifdef __cplusplus
127 }
128 #endif
129 
130 #endif /* ZYAN_NO_LIBC */
131 
132 #endif /* ZYCORE_API_SYNCHRONIZATION_H */
#define ZYCORE_EXPORT
Definition: Defines.h:221
ZyanU32 ZyanStatus
Definition: Status.h:48
ZYCORE_EXPORT ZyanBool ZyanCriticalSectionTryEnter(ZyanCriticalSection *critical_section)
ZYCORE_EXPORT ZyanStatus ZyanCriticalSectionDelete(ZyanCriticalSection *critical_section)
ZYCORE_EXPORT ZyanStatus ZyanCriticalSectionLeave(ZyanCriticalSection *critical_section)
ZYCORE_EXPORT ZyanStatus ZyanCriticalSectionInitialize(ZyanCriticalSection *critical_section)
ZYCORE_EXPORT ZyanStatus ZyanCriticalSectionEnter(ZyanCriticalSection *critical_section)
ZyanU8 ZyanBool
Definition: Types.h:192