diff options
Diffstat (limited to 'src/util/threadinterrupt.cpp')
-rw-r--r-- | src/util/threadinterrupt.cpp | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/src/util/threadinterrupt.cpp b/src/util/threadinterrupt.cpp new file mode 100644 index 0000000000..70731d6f31 --- /dev/null +++ b/src/util/threadinterrupt.cpp @@ -0,0 +1,35 @@ +// Copyright (c) 2009-2010 Satoshi Nakamoto +// Copyright (c) 2009-2018 The Bitcoin Core developers +// Distributed under the MIT software license, see the accompanying +// file COPYING or http://www.opensource.org/licenses/mit-license.php. + +#include <util/threadinterrupt.h> + +#include <sync.h> + +CThreadInterrupt::CThreadInterrupt() : flag(false) {} + +CThreadInterrupt::operator bool() const +{ + return flag.load(std::memory_order_acquire); +} + +void CThreadInterrupt::reset() +{ + flag.store(false, std::memory_order_release); +} + +void CThreadInterrupt::operator()() +{ + { + LOCK(mut); + flag.store(true, std::memory_order_release); + } + cond.notify_all(); +} + +bool CThreadInterrupt::sleep_for(Clock::duration rel_time) +{ + WAIT_LOCK(mut, lock); + return !cond.wait_for(lock, rel_time, [this]() { return flag.load(std::memory_order_acquire); }); +} |