3
0
Fork 0
mirror of https://github.com/Z3Prover/z3 synced 2025-04-09 19:01:50 +00:00
z3/src/util/mutex.h
Nuno Lopes 87a96d7bd4 fix mutexes hanging due to access to free'd memory
Thanks to Kevin de Vos for reporting the bug & testing the fix
2019-09-03 20:02:21 +01:00

47 lines
859 B
C++

/*++
Copyright (c) 2019 Microsoft Corporation
Module Name:
mutex.h
Abstract:
Auxiliary macros for mutual exclusion
--*/
#pragma once
#ifdef SINGLE_THREAD
template<typename T> 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)
#define DEALLOC_MUTEX(name) (void)
#else
#include <atomic>
#include <mutex>
template<typename T> using atomic = std::atomic<T>;
typedef std::mutex mutex;
typedef std::lock_guard<std::mutex> 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