Many thanks to Chris M. Thomasson for rewriting POSIX Threads for Win32 mutex into standard C++ implementation. Using
auto_eventclass from Event objects.
mutex.h:
#pragma once #include#include "event.h" class fast_mutex { public: fast_mutex() : m_state(0) {} void lock() { if (m_state.exchange(1, std::memory_order_acquire)) while (m_state.exchange(2, std::memory_order_acquire)) m_waitset.wait(); } void unlock() { if (m_state.exchange(0, std::memory_order_release) == 2) m_waitset.signal(); } private: std::atomic m_state; auto_event m_waitset; };