3#include "TinyRobotics/utils/Config.h"
5#ifdef USE_STD_CONCURRENCY
10namespace tinyrobotics {
13
14
15
16
17
20 virtual void lock() {}
21 virtual void unlock() {}
24#if defined(USE_STD_CONCURRENCY)
26class SpinLock :
public MutexBase {
30 if (!lock_.exchange(
true, std::memory_order_acquire)) {
34 while (lock_.load(std::memory_order_relaxed)) {
46 return !lock_.load(std::memory_order_relaxed) &&
47 !lock_.exchange(
true, std::memory_order_acquire);
50 void unlock() { lock_.store(
false, std::memory_order_release); }
53 volatile std::atomic<
bool> lock_ = {0};
58
59
60
61
62
63class StdMutex :
public MutexBase {
65 void lock() override { std_mutex.lock(); }
66 void unlock() override { std_mutex.unlock(); }
73
74
75
76
77
78class StdRecursiveMutex :
public MutexBase {
80 void lock() override { std_mutex.lock(); }
81 void unlock() override { std_mutex.unlock(); }
84 std::recursive_mutex std_mutex;
Empty Mutex implementation which does nothing.
Definition: Mutex.h:18