OSSIM - Open Source Software Image Map  Version 1.9.0 (20180803)
RWLock.h
Go to the documentation of this file.
1 
5 #ifndef ossimRWLockHEADER
6 #define ossimRWLockHEADER 1
7 
8 #include <condition_variable>
9 #include <mutex>
10 #include <atomic>
11 #include <limits>
12 
13 namespace ossim {
14 
38  class RWLock {
39  private:
40  std::mutex m_waitMutex;
41  std::condition_variable m_waitConditional;
42  std::atomic_int m_refCounter;
43  const int MIN_INT;
44 
45  public:
46 
47  RWLock();
48 
49  void lockWrite();
50 
51  bool tryLockWrite();
52 
53  void unlockWrite();
54 
55  void lockRead();
56 
57  bool tryLockRead();
58 
59  void unlockRead();
60  };
61 
62 
63  class ScopeReadLock {
65  public:
66  ScopeReadLock(RWLock &lock) : m_lock(lock) {
67  m_lock.lockRead();
68  }
69 
72  }
73  };
74 
77  public:
78  ScopeWriteLock(RWLock& lock) : m_lock(lock) {
79  m_lock.lockWrite();
80  }
81 
84  }
85  };
86 };
87 
88 #endif
Code was derived from https://gist.github.com/mshockwave.
Definition: RWLock.h:38
ScopeReadLock(RWLock &lock)
Definition: RWLock.h:66
void lockWrite()
Definition: RWLock.cpp:10
This code was derived from https://gist.github.com/mshockwave.
Definition: Barrier.h:8
void unlockRead()
Definition: RWLock.cpp:64
bool tryLockRead()
Definition: RWLock.cpp:59
std::mutex m_waitMutex
Definition: RWLock.h:40
void lockRead()
Definition: RWLock.cpp:46
bool tryLockWrite()
Definition: RWLock.cpp:32
void unlockWrite()
Definition: RWLock.cpp:40
const int MIN_INT
Definition: RWLock.h:43
RWLock & m_lock
Definition: RWLock.h:76
RWLock & m_lock
Definition: RWLock.h:64
std::atomic_int m_refCounter
Definition: RWLock.h:42
std::condition_variable m_waitConditional
Definition: RWLock.h:41
ScopeWriteLock(RWLock &lock)
Definition: RWLock.h:78