mpd/src/thread/Mutex.hxx
2023-04-06 21:32:18 +02:00

43 lines
751 B
C++

// SPDX-License-Identifier: BSD-2-Clause
// author: Max Kellermann <max.kellermann@gmail.com>
#ifndef THREAD_MUTEX_HXX
#define THREAD_MUTEX_HXX
#include <mutex>
#ifdef _WIN32
#include "CriticalSection.hxx"
using Mutex = CriticalSection;
using RecursiveMutex = CriticalSection;
#else
using Mutex = std::mutex;
using RecursiveMutex = std::recursive_mutex;
#endif
/**
* Within the scope of an instance, this class will keep a #Mutex
* unlocked.
*/
class ScopeUnlock {
Mutex &mutex;
public:
explicit ScopeUnlock(Mutex &_mutex) noexcept:mutex(_mutex) {
mutex.unlock();
}
~ScopeUnlock() noexcept {
mutex.lock();
}
ScopeUnlock(const ScopeUnlock &other) = delete;
ScopeUnlock &operator=(const ScopeUnlock &other) = delete;
};
#endif