Branch data Line data Source code
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 : 4012 : CThreadInterrupt::CThreadInterrupt() : flag(false) {} 11 : : 12 : 22882 : CThreadInterrupt::operator bool() const 13 : : { 14 : 22882 : return flag.load(std::memory_order_acquire); 15 : : } 16 : : 17 : 0 : void CThreadInterrupt::reset() 18 : : { 19 : 0 : flag.store(false, std::memory_order_release); 20 : 0 : } 21 : : 22 : 4012 : void CThreadInterrupt::operator()() 23 : : { 24 : : { 25 : 4012 : LOCK(mut); 26 : 4012 : flag.store(true, std::memory_order_release); 27 : 4012 : } 28 : 4012 : cond.notify_all(); 29 : 4012 : } 30 : : 31 : 1621 : bool CThreadInterrupt::sleep_for(Clock::duration rel_time) 32 : : { 33 : 1621 : WAIT_LOCK(mut, lock); 34 [ + - ]: 4863 : return !cond.wait_for(lock, rel_time, [this]() { return flag.load(std::memory_order_acquire); }); 35 : 1621 : }