[flang-commits] [flang] 99fe38a - [flang][runtime] Remove dependency on C++ <mutex> on Windows
Diana Picus via flang-commits
flang-commits at lists.llvm.org
Fri Jun 10 04:29:05 PDT 2022
Author: Markus Mützel
Date: 2022-06-10T11:25:45Z
New Revision: 99fe38a13a2d111fbb0b7848415d4ba3cab11437
URL: https://github.com/llvm/llvm-project/commit/99fe38a13a2d111fbb0b7848415d4ba3cab11437
DIFF: https://github.com/llvm/llvm-project/commit/99fe38a13a2d111fbb0b7848415d4ba3cab11437.diff
LOG: [flang][runtime] Remove dependency on C++ <mutex> on Windows
The implementation of the Lock class on Windows currently uses C++
mutexes. That introduces a dependency on the C++ runtime on that
platform.
Use a Windows CriticalSection instead of a std::mutex to avoid that
dependency.
This works for me with MinGW (tested in a CLANG64 environment of MSYS2).
See also D126291.
Differential Revision: https://reviews.llvm.org/D127316
Added:
Modified:
flang/runtime/lock.h
Removed:
################################################################################
diff --git a/flang/runtime/lock.h b/flang/runtime/lock.h
index 0abc1158c2c1..7af1ab89758e 100644
--- a/flang/runtime/lock.h
+++ b/flang/runtime/lock.h
@@ -23,6 +23,10 @@
#if USE_PTHREADS
#include <pthread.h>
+#elif defined(_WIN32)
+// Do not define macros for "min" and "max"
+#define NOMINMAX
+#include <windows.h>
#else
#include <mutex>
#endif
@@ -40,6 +44,12 @@ class Lock {
}
bool Try() { return pthread_mutex_trylock(&mutex_) == 0; }
void Drop() { pthread_mutex_unlock(&mutex_); }
+#elif defined(_WIN32)
+ Lock() { InitializeCriticalSection(&cs_); }
+ ~Lock() { DeleteCriticalSection(&cs_); }
+ void Take() { EnterCriticalSection(&cs_); }
+ bool Try() { return TryEnterCriticalSection(&cs_); }
+ void Drop() { LeaveCriticalSection(&cs_); }
#else
void Take() { mutex_.lock(); }
bool Try() { return mutex_.try_lock(); }
@@ -56,6 +66,8 @@ class Lock {
private:
#if USE_PTHREADS
pthread_mutex_t mutex_{};
+#elif defined(_WIN32)
+ CRITICAL_SECTION cs_;
#else
std::mutex mutex_;
#endif
More information about the flang-commits
mailing list