/usr/include/ossim/base/RWLock.h is in libossim-dev 2.2.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | /**
* This code was derived from https://gist.github.com/mshockwave
*
*/
#ifndef ossimRWLockHEADER
#define ossimRWLockHEADER 1
#include <condition_variable>
#include <mutex>
#include <atomic>
#include <limits>
namespace ossim {
/**
* Code was derived from https://gist.github.com/mshockwave
*
* Has a pure c++11 implementation for read/write locks
* allowing one to choose the locking technique to use.
*
* At the bottom we added typedefs so you do not have
* to specify the template values.
*
*
* Example:
* @code
* ossim::RWLock mutex;
* // enter a section that just needs read only access
* {
* ossim::ScopeReadLock lock(mutex);
* }
* // enter some section that requires write
* {
* ossim::ScopeWriteLock lock(mutex);
* }
* @endcode
*/
class RWLock {
private:
std::mutex m_waitMutex;
std::condition_variable m_waitConditional;
std::atomic_int m_refCounter;
const int MIN_INT;
public:
RWLock();
void lockWrite();
bool tryLockWrite();
void unlockWrite();
void lockRead();
bool tryLockRead();
void unlockRead();
};
class ScopeReadLock {
RWLock& m_lock;
public:
ScopeReadLock(RWLock &lock) : m_lock(lock) {
m_lock.lockRead();
}
~ScopeReadLock() {
m_lock.unlockRead();
}
};
class ScopeWriteLock {
RWLock& m_lock;
public:
ScopeWriteLock(RWLock& lock) : m_lock(lock) {
m_lock.lockWrite();
}
~ScopeWriteLock() {
m_lock.unlockWrite();
}
};
};
#endif
|