summaryrefslogtreecommitdiff
path: root/core/os/rw_lock.h
diff options
context:
space:
mode:
authorJuan Linietsky <reduzio@gmail.com>2017-01-07 18:25:37 -0300
committerJuan Linietsky <reduzio@gmail.com>2017-01-07 18:26:38 -0300
commit2ab83e1abbf5ee6d00e16056a9e9394114026f28 (patch)
tree7efbb375cc4d00d8e8589fcf1b6a1303bec5df2d /core/os/rw_lock.h
parent2a38a5eaa844043b846e03d6655f84caf8a31e74 (diff)
Memory pool vectors (DVector) have been enormously simplified in code, and renamed to PoolVector
Diffstat (limited to 'core/os/rw_lock.h')
-rw-r--r--core/os/rw_lock.h46
1 files changed, 46 insertions, 0 deletions
diff --git a/core/os/rw_lock.h b/core/os/rw_lock.h
new file mode 100644
index 0000000000..c513e6d636
--- /dev/null
+++ b/core/os/rw_lock.h
@@ -0,0 +1,46 @@
+#ifndef RWLOCK_H
+#define RWLOCK_H
+
+#include "error_list.h"
+
+class RWLock {
+protected:
+ static RWLock* (*create_func)();
+
+public:
+
+ virtual void read_lock()=0; ///< Lock the rwlock, block if locked by someone else
+ virtual void read_unlock()=0; ///< Unlock the rwlock, let other threads continue
+ virtual Error read_try_lock()=0; ///< Attempt to lock the rwlock, OK on success, ERROR means it can't lock.
+
+ virtual void write_lock()=0; ///< Lock the rwlock, block if locked by someone else
+ virtual void write_unlock()=0; ///< Unlock the rwlock, let other thwrites continue
+ virtual Error write_try_lock()=0; ///< Attempt to lock the rwlock, OK on success, ERROR means it can't lock.
+
+ static RWLock * create(); ///< Create a rwlock
+
+ virtual ~RWLock();
+};
+
+
+class RWLockRead {
+
+ RWLock *lock;
+public:
+
+ RWLockRead(RWLock* p_lock) { lock=p_lock; if (lock) lock->read_lock(); }
+ ~RWLockRead() { if (lock) lock->read_unlock(); }
+
+};
+
+class RWLockWrite {
+
+ RWLock *lock;
+public:
+
+ RWLockWrite(RWLock* p_lock) { lock=p_lock; if (lock) lock->write_lock(); }
+ ~RWLockWrite() { if (lock) lock->write_unlock(); }
+
+};
+
+#endif // RWLOCK_H