libcommonc++  0.7
Semaphore.h++
Go to the documentation of this file.
1 /* ---------------------------------------------------------------------------
2  commonc++ - A C++ Common Class Library
3  Copyright (C) 2005-2014 Mark A Lindner
4 
5  This file is part of commonc++.
6 
7  This library is free software; you can redistribute it and/or
8  modify it under the terms of the GNU Library General Public
9  License as published by the Free Software Foundation; either
10  version 2 of the License, or (at your option) any later version.
11 
12  This library is distributed in the hope that it will be useful,
13  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15  Library General Public License for more details.
16 
17  You should have received a copy of the GNU Library General Public
18  License along with this library; if not, write to the Free
19  Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20  ---------------------------------------------------------------------------
21 */
22 
23 #ifndef __ccxx_Semaphore_hxx
24 #define __ccxx_Semaphore_hxx
25 
26 #include <commonc++/Common.h++>
27 #include <commonc++/Lock.h++>
29 #include <commonc++/String.h++>
31 
32 #ifdef CCXX_OS_POSIX
33 #include <fcntl.h>
34 #include <semaphore.h>
35 #endif
36 
37 namespace ccxx {
38 
53 {
54  public:
55 
67  Semaphore(const String& name, uint_t value = 1,
69 
74  ~Semaphore();
75 
82  void init();
83 
92  bool wait();
93 
95  inline void lock()
96  { wait(); }
97 
105  bool tryWait();
106 
114  bool signal();
115 
117  inline void unlock()
118  { signal(); }
119 
121  int getValue() const;
122 
124  inline String getName() const
125  { return(_name); }
126 
127  private:
128 
129  String _name;
130  uint_t _value;
131  Permissions _perm;
132  bool _initialized;
133 
134 #ifdef CCXX_OS_WINDOWS
135  HANDLE _sem;
136 #else
137  sem_t* _sem;
138 #endif
139 };
140 
141 } // namespace ccxx
142 
143 #endif // __ccxx_Semaphore_hxx
An abstract base class for synchronization primitives.
Definition: Lock.h++:35
unsigned int uint_t
An alias for unsigned int.
Definition: Integers.h++:74
#define COMMONCPP_API
Definition: Common.h++:126
A flexible, reference counted, copy-on-write, thread-safe, nullable string.
Definition: String.h++:50
void unlock()
Equivalent to signal().
Definition: Semaphore.h++:117
void lock()
Equivalent to wait().
Definition: Semaphore.h++:95
File permissions.
Definition: Permissions.h++:38
String getName() const
Get the name of the semaphore.
Definition: Semaphore.h++:124
static const int USER_READ_WRITE
User read and write mask.
Definition: Permissions.h++:62
Definition: AllocationMap.c++:25
A counting semaphore – a synchronization primitive that allows multiple processes to coordinate acce...
Definition: Semaphore.h++:52