windows/SysSemaphore.cpp
Go to the documentation of this file.
1 /*----------------------------------------------------------------------------*/
2 /* */
3 /* Copyright (c) 1995, 2004 IBM Corporation. All rights reserved. */
4 /* Copyright (c) 2005-2009 Rexx Language Association. All rights reserved. */
5 /* */
6 /* This program and the accompanying materials are made available under */
7 /* the terms of the Common Public License v1.0 which accompanies this */
8 /* distribution. A copy is also available at the following address: */
9 /* http://www.ibm.com/developerworks/oss/CPLv1.0.htm */
10 /* */
11 /* Redistribution and use in source and binary forms, with or */
12 /* without modification, are permitted provided that the following */
13 /* conditions are met: */
14 /* */
15 /* Redistributions of source code must retain the above copyright */
16 /* notice, this list of conditions and the following disclaimer. */
17 /* Redistributions in binary form must reproduce the above copyright */
18 /* notice, this list of conditions and the following disclaimer in */
19 /* the documentation and/or other materials provided with the distribution. */
20 /* */
21 /* Neither the name of Rexx Language Association nor the names */
22 /* of its contributors may be used to endorse or promote products */
23 /* derived from this software without specific prior written permission. */
24 /* */
25 /* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS */
26 /* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT */
27 /* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS */
28 /* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT */
29 /* OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, */
30 /* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED */
31 /* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, */
32 /* OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY */
33 /* OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING */
34 /* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */
35 /* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */
36 /* */
37 /*----------------------------------------------------------------------------*/
38 /*****************************************************************************/
39 /* REXX Windows Support */
40 /* */
41 /* Semaphore support for Windows */
42 /* */
43 /*****************************************************************************/
44 
45 #include "SysSemaphore.hpp"
46 
47 bool SysSemaphore::usingTls = false;
48 DWORD SysSemaphore::tlsNoMessageLoopIndex = TLS_OUT_OF_INDEXES;
49 
50 /**
51  * Create a semaphore with potential creation-time
52  * initialization.
53  *
54  * @param create Indicates whether the semaphore should be created now.
55  */
56 SysSemaphore::SysSemaphore(const char *variable, bool createSem)
57 {
58  semVariable = variable;
59  sem = 0;
60  if (createSem)
61  {
62  create();
63  }
64 }
65 
66 
67 /* ********************************************************************** */
68 /* *** SysSemaphore *** */
69 /* ********************************************************************** */
71 {
72  if (sem == 0 )
73  {
74  sem = CreateEvent(NULL, true, true, NULL);
75  }
76 }
77 
79 {
80  if (sem != 0)
81  {
82  CloseHandle(sem);
83  sem = 0;
84  }
85 }
86 
87 
88 /* ********************************************************************** */
89 /* *** SysMutex *** */
90 /* ********************************************************************** */
91 
92 /**
93  * Create a semaphore with potential creation-time
94  * initialization.
95  *
96  * @param create Indicates whether the semaphore should be created now.
97  */
98 SysMutex::SysMutex(const char *variable, bool createSem)
99 {
100  mutexVariable = variable;
101  mutexMutex = 0;
102  if (createSem)
103  {
104  create();
105  }
106 }
107 
108 
109 void SysMutex::create()
110 {
111  if (mutexMutex == 0)
112  {
113  mutexMutex = CreateMutex(NULL, false, NULL);
114  }
115 }
116 
117 void SysMutex::close()
118 {
119  if (mutexMutex != 0)
120  {
121  CloseHandle(mutexMutex);
122  mutexMutex = 0;
123  }
124 }
pthread_mutex_t mutexMutex
SysMutex(const char *variable)
const char * mutexVariable
SysSemaphore(const char *variable)
const char * semVariable
static DWORD tlsNoMessageLoopIndex