aboutsummaryrefslogtreecommitdiff
path: root/drivers/windows/rw_lock_windows.cpp
diff options
context:
space:
mode:
authorJuan Linietsky2017-01-08 11:13:12 -0300
committerJuan Linietsky2017-01-08 11:13:12 -0300
commit263d5fcff86ff4b34b2a19bfe66b79e93f6bb976 (patch)
tree8cca09ddc9692d64e0c2b3098faf97cc1541fb1a /drivers/windows/rw_lock_windows.cpp
parentaa60e02cf602c9c54b54eee257b3bfa675724788 (diff)
downloadgodot-263d5fcff86ff4b34b2a19bfe66b79e93f6bb976.tar.gz
godot-263d5fcff86ff4b34b2a19bfe66b79e93f6bb976.tar.zst
godot-263d5fcff86ff4b34b2a19bfe66b79e93f6bb976.zip
Diffstat (limited to 'drivers/windows/rw_lock_windows.cpp')
-rw-r--r--drivers/windows/rw_lock_windows.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/drivers/windows/rw_lock_windows.cpp b/drivers/windows/rw_lock_windows.cpp
new file mode 100644
index 000000000..0da7bf4bd
--- /dev/null
+++ b/drivers/windows/rw_lock_windows.cpp
@@ -0,0 +1,72 @@
+
+#if defined(WINDOWS_ENABLED)
+
+#include "os/memory.h"
+#include "rw_lock_windows.h"
+#include "error_macros.h"
+#include <stdio.h>
+
+void RWLockWindows::read_lock() {
+
+ AcquireSRWLockShared(&lock);
+
+}
+
+void RWLockWindows::read_unlock() {
+
+ ReleaseSRWLockShared(&lock);
+}
+
+Error RWLockWindows::read_try_lock() {
+
+ if (TryAcquireSRWLockShared(&lock)==0) {
+ return ERR_BUSY;
+ } else {
+ return OK;
+ }
+
+}
+
+void RWLockWindows::write_lock() {
+
+ AcquireSRWLockExclusive(&lock);
+
+}
+
+void RWLockWindows::write_unlock() {
+
+ ReleaseSRWLockExclusive(&lock);
+}
+
+Error RWLockWindows::write_try_lock() {
+ if (TryAcquireSRWLockExclusive(&lock)==0) {
+ return ERR_BUSY;
+ } else {
+ return OK;
+ }
+}
+
+
+RWLock *RWLockWindows::create_func_windows() {
+
+ return memnew( RWLockWindows );
+}
+
+void RWLockWindows::make_default() {
+
+ create_func=create_func_windows;
+}
+
+
+RWLockWindows::RWLockWindows() {
+
+ InitializeSRWLock(&lock);
+}
+
+
+RWLockWindows::~RWLockWindows() {
+
+
+}
+
+#endif