threadinterrupt.cpp raw
1 // Copyright (c) 2009-2010 Satoshi Nakamoto
2 // Copyright (c) 2009-present The Bitcoin Core developers
3 // Distributed under the MIT software license, see the accompanying
4 // file COPYING or http://www.opensource.org/licenses/mit-license.php.
5
6 #include <util/threadinterrupt.h>
7
8 #include <sync.h>
9
10 CThreadInterrupt::CThreadInterrupt() : flag(false) {}
11
12 bool CThreadInterrupt::interrupted() const
13 {
14 return flag.load(std::memory_order_acquire);
15 }
16
17 CThreadInterrupt::operator bool() const
18 {
19 return interrupted();
20 }
21
22 void CThreadInterrupt::reset()
23 {
24 flag.store(false, std::memory_order_release);
25 }
26
27 void CThreadInterrupt::operator()()
28 {
29 {
30 LOCK(mut);
31 flag.store(true, std::memory_order_release);
32 }
33 cond.notify_all();
34 }
35
36 bool CThreadInterrupt::sleep_for(Clock::duration rel_time)
37 {
38 WAIT_LOCK(mut, lock);
39 return !cond.wait_for(lock, rel_time, [this]() { return flag.load(std::memory_order_acquire); });
40 }
41