Modernes C++ programmieren

Okt 23, 2024

lst-1047-godb.cpp

//#(execute) c++; compiler:g132; options:-O3 -std=c++23; libs:-
// https://godbolt.org/z/W47YTYcEb 
#include <atomic>
class SpinlockMutex {
  std::atomic_flag flag_;
public:
  SpinlockMutex()
  : flag_{ATOMIC_FLAG_INIT}
  {}
  void lock() {                                 // z. B. von lock_guard aufgerufen
    while(flag_.test_and_set(std::memory_order_acquire)) // hauptsächlich lesen
      { /* nothing */ }
  }
  void unlock() {
    flag_.clear(std::memory_order_release);              // Schreiboperation
  }
};