guanaqo develop
Utilities for scientific software
Loading...
Searching...
No Matches
atomic-stop-signal.hpp
Go to the documentation of this file.
1#pragma once
2
3/// @file
4/// @ingroup control
5/// Thread-safe stop signal.
6
7#include <atomic>
8
9namespace guanaqo {
10
11/// Cancel a running solver or other job in a thread-safe and signal-safe way.
12/// @ingroup control
14 public:
15 AtomicStopSignal() = default;
19 AtomicStopSignal &operator=(AtomicStopSignal &&) noexcept { return *this; }
20
21 void stop() { stop_flag.store(true, std::memory_order_seq_cst); }
22 [[nodiscard]] bool stop_requested() const {
23 return stop_flag.load(std::memory_order_relaxed);
24 }
25
26 private:
27 std::atomic<bool> stop_flag{false};
28};
29
30} // namespace guanaqo
AtomicStopSignal & operator=(const AtomicStopSignal &)=delete
AtomicStopSignal & operator=(AtomicStopSignal &&) noexcept
AtomicStopSignal(const AtomicStopSignal &)
AtomicStopSignal(AtomicStopSignal &&) noexcept