/*++ Copyright (c) 2019 Microsoft Corporation Module Name: mutex.h Abstract: Auxiliary macros for mutual exclusion --*/ #pragma once #ifdef SINGLE_THREAD template using atomic = T; struct mutex { void lock() {} void unlock() {} }; struct lock_guard { lock_guard(mutex &) {} }; #define DECLARE_MUTEX(name) mutex *name = nullptr #define DECLARE_INIT_MUTEX(name) mutex *name = nullptr #define ALLOC_MUTEX(name) (void)0 #define DEALLOC_MUTEX(name) (void)0 #else #include #include template using atomic = std::atomic; typedef std::mutex mutex; typedef std::lock_guard lock_guard; #define DECLARE_MUTEX(name) mutex *name = nullptr #define DECLARE_INIT_MUTEX(name) mutex *name = new mutex #define ALLOC_MUTEX(name) name = alloc(mutex) #define DEALLOC_MUTEX(name) dealloc(name) #endif