/root/bitcoin/src/util/threadinterrupt.cpp
| Line | Count | Source | 
| 1 |  | // Copyright (c) 2009-2010 Satoshi Nakamoto | 
| 2 |  | // Copyright (c) 2009-2022 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 | 0 | CThreadInterrupt::CThreadInterrupt() : flag(false) {} | 
| 11 |  |  | 
| 12 |  | CThreadInterrupt::operator bool() const | 
| 13 | 0 | { | 
| 14 | 0 |     return flag.load(std::memory_order_acquire); | 
| 15 | 0 | } | 
| 16 |  |  | 
| 17 |  | void CThreadInterrupt::reset() | 
| 18 | 0 | { | 
| 19 | 0 |     flag.store(false, std::memory_order_release); | 
| 20 | 0 | } | 
| 21 |  |  | 
| 22 |  | void CThreadInterrupt::operator()() | 
| 23 | 2 | { | 
| 24 | 2 |     { | 
| 25 | 2 |         LOCK(mut); | 
| 26 | 2 |         flag.store(true, std::memory_order_release); | 
| 27 | 2 |     } | 
| 28 | 2 |     cond.notify_all(); | 
| 29 | 2 | } | 
| 30 |  |  | 
| 31 |  | bool CThreadInterrupt::sleep_for(Clock::duration rel_time) | 
| 32 | 0 | { | 
| 33 | 0 |     WAIT_LOCK(mut, lock); | 
| 34 | 0 |     return !cond.wait_for(lock, rel_time, [this]() { return flag.load(std::memory_order_acquire); }); | 
| 35 | 0 | } |