[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