Add a portable wrapper for reader-writer locks.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@73545 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/System/Win32/RWMutex.inc b/lib/System/Win32/RWMutex.inc
new file mode 100644
index 0000000..08c31f1
--- /dev/null
+++ b/lib/System/Win32/RWMutex.inc
@@ -0,0 +1,55 @@
+//= llvm/System/Win32/Mutex.inc - Win32 Reader/Writer Mutual Exclusion Lock =//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements the Win32 specific (non-pthread) RWMutex class.
+//
+//===----------------------------------------------------------------------===//
+
+//===----------------------------------------------------------------------===//
+//=== WARNING: Implementation here must contain only generic Win32 code that
+//=== is guaranteed to work on *all* Win32 variants.
+//===----------------------------------------------------------------------===//
+
+#include "Win32.h"
+
+namespace llvm {
+using namespace sys;
+
+RWMutex::RWMutex() {
+ data_ = new PSRWLOCK;
+ InitializeSRWLock((PSRWLOCK*)data_);
+}
+
+RWMutex::~RWMutex() {
+ delete (PSRWLOCK*)data_;
+ data_ = 0;
+}
+
+bool RWMutex::reader_acquire() {
+ AcquireSRWLockShared((PSRWLOCK*)data_);
+ return true;
+}
+
+bool RWMutex::reader_release() {
+ ReleaseSRWLockShared((PSRWLOCK*)data_);
+ return true;
+}
+
+bool RWMutex::writer_acquire() {
+ AcquireSRWLockExclusive((PSRWLOCK*)data_);
+ return true;
+}
+
+bool RWMutex::writer_release() {
+ ReleaseSRWLockExclusive((PSRWLOCK*)data_);
+ return true;
+}
+
+
+}