libcommonc++  0.7
CriticalSection.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_CriticalSection_hxx
24 #define __ccxx_CriticalSection_hxx
25 
26 #include <commonc++/Common.h++>
27 #include <commonc++/Lock.h++>
28 #ifndef CCXX_OS_WINDOWS
31 #include <commonc++/Random.h++>
32 #endif
33 
34 namespace ccxx {
35 
52 {
53  public:
54 
57 
62  ~CriticalSection();
63 
65  void enter();
66 
68  inline void lock()
69  { enter(); }
70 
78  bool tryEnter();
79 
81  void leave();
82 
84  inline void unlock()
85  { leave(); }
86 
87  private:
88 
89 #ifdef CCXX_OS_WINDOWS
90  CRITICAL_SECTION _lock;
91 #else
92  AtomicCounter _lock;
93  ThreadLocalCounter _counter;
94  Random _rand;
95 #endif
96 };
97 
98 } // namespace ccxx
99 
100 #endif // __ccxx_CriticalSection_hxx
A critical section, a synchronization primitive that is typically more efficient than but roughly sem...
Definition: CriticalSection.h++:51
An abstract base class for synchronization primitives.
Definition: Lock.h++:35
A random number generator.
Definition: Random.h++:35
void unlock()
Equivalent to leave().
Definition: CriticalSection.h++:84
An integer counter whose value is modified in an atomic fashion.
Definition: AtomicCounter.h++:36
#define COMMONCPP_API
Definition: Common.h++:126
void lock()
Equivalent to enter().
Definition: CriticalSection.h++:68
Thread-local numeric counter.
Definition: ThreadLocalCounter.h++:37
Definition: AllocationMap.c++:25