From d7bd511c703664b388724c61e4eea764eaaeb045 Mon Sep 17 00:00:00 2001 From: Henrik Stickann <4376396-Mithradir@users.noreply.gitlab.com> Date: Sat, 9 Apr 2022 21:23:02 +0200 Subject: [PATCH] Add mutex implementation using std::atomic_flag --- include/sta/atomic_mutex.hpp | 25 +++++++++++++++++++++++++ src/atomic_mutex.cpp | 19 +++++++++++++++++++ 2 files changed, 44 insertions(+) create mode 100644 include/sta/atomic_mutex.hpp create mode 100644 src/atomic_mutex.cpp diff --git a/include/sta/atomic_mutex.hpp b/include/sta/atomic_mutex.hpp new file mode 100644 index 0000000..39d2cf9 --- /dev/null +++ b/include/sta/atomic_mutex.hpp @@ -0,0 +1,25 @@ +#ifndef STA_ATOMIC_MUTEX_HPP +#define STA_ATOMIC_MUTEX_HPP + +#include + +#include + + +namespace sta +{ + class AtomicMutex : public Mutex + { + public: + AtomicMutex(); + + void acquire() override; + void release() override; + + private: + std::atomic_flag lock_; + }; +} // namespace sta + + +#endif // STA_ATOMIC_MUTEX_HPP diff --git a/src/atomic_mutex.cpp b/src/atomic_mutex.cpp new file mode 100644 index 0000000..87b9be3 --- /dev/null +++ b/src/atomic_mutex.cpp @@ -0,0 +1,19 @@ +#include + + +namespace sta +{ + AtomicMutex::AtomicMutex() + : lock_{ATOMIC_FLAG_INIT} + {} + + void AtomicMutex::acquire() + { + while (lock_.test_and_set()); + } + + void AtomicMutex::release() + { + lock_.clear(); + } +} // namespace sta