/* * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. * * Copyright 2019 Danny Robson */ #pragma once #include "../win32/handle.hpp" #include "../win32/windows.hpp" // Include the std mutex header so we can get access to expected // functionality like std::lock_guard. #include namespace cruft::thread { inline namespace win32 { class mutex { public: constexpr mutex () noexcept : m_section {} { InitializeCriticalSection (&m_section); } mutex (mutex const&) = delete; ~mutex (); void lock (void); void unlock (void); bool try_lock (void); CRITICAL_SECTION& native_handle (void); private: CRITICAL_SECTION m_section; }; }; }