Add CriticalSection handling instead of mutexes for Windows
@@ -515,7 +515,12 @@ static int gemm_driver(blas_arg_t *args, BLASLONG *range_m, BLASLONG
BLASLONG nthreads_m, BLASLONG nthreads_n) {
#ifndef USE_OPENMP
+#ifndef OS_WINDOWS
static pthread_mutex_t level3_lock = PTHREAD_MUTEX_INITIALIZER;
+#else
+CRITICAL_SECTION level3_lock;
+InitializeCriticalSection((PCRITICAL_SECTION)&level3_lock;
+#endif
#endif
blas_arg_t newarg;
@@ -559,7 +564,11 @@ static pthread_mutex_t level3_lock = PTHREAD_MUTEX_INITIALIZER;
#endif
#ifndef USE_OPENMP
+#ifndef OS_WINDOWS
pthread_mutex_lock(&level3_lock);
+#else
+EnterCriticalSection((PCRITICAL_SECTION)&level3_lock);
+#endif
#endif
#ifdef USE_ALLOC_HEAP
@@ -680,7 +689,11 @@ pthread_mutex_lock(&level3_lock);
#endif
#ifndef USE_OPENMP
+#ifndef OS_WINDOWS
pthread_mutex_unlock(&level3_lock);
+#else
+ LeaveCriticalSection((PCRITICAL_SECTION)&level3_lock);
+#endif
#endif
return 0;
