Bitcoin
Public Member Functions | Private Member Functions | Private Attributes | List of all members
SingleThreadedSchedulerClient Class Reference

#include <scheduler.h>

Public Member Functions

 SingleThreadedSchedulerClient (CScheduler *pschedulerIn)
 
void AddToProcessQueue (std::function< void()> func)
 
void EmptyQueue ()
 
size_t CallbacksPending ()
 

Private Member Functions

std::list< std::function< void()> > m_callbacks_pending GUARDED_BY (m_cs_callbacks_pending)
 
bool m_are_callbacks_running GUARDED_BY (m_cs_callbacks_pending)
 
void MaybeScheduleProcessQueue ()
 
void ProcessQueue ()
 

Private Attributes

CSchedulerm_pscheduler
 
CCriticalSection m_cs_callbacks_pending
 

Detailed Description

Class used by CScheduler clients which may schedule multiple jobs which are required to be run serially. Jobs may not be run on the same thread, but no two jobs will be executed at the same time and memory will be release-acquire consistent (the scheduler will internally do an acquire before invoking a callback as well as a release at the end). In practice this means that a callback B() will be able to observe all of the effects of callback A() which executed before it.

Constructor & Destructor Documentation

◆ SingleThreadedSchedulerClient()

SingleThreadedSchedulerClient::SingleThreadedSchedulerClient ( CScheduler pschedulerIn)
inlineexplicit

Member Function Documentation

◆ AddToProcessQueue()

void SingleThreadedSchedulerClient::AddToProcessQueue ( std::function< void()>  func)

Add a callback to be executed. Callbacks are executed serially and memory is release-acquire consistent between callback executions. Practically, this means that callbacks can behave as if they are executed in order by a single thread.

◆ CallbacksPending()

size_t SingleThreadedSchedulerClient::CallbacksPending ( )

◆ EmptyQueue()

void SingleThreadedSchedulerClient::EmptyQueue ( )

◆ GUARDED_BY() [1/2]

std::list<std::function<void ()> > m_callbacks_pending SingleThreadedSchedulerClient::GUARDED_BY ( m_cs_callbacks_pending  )
private

◆ GUARDED_BY() [2/2]

bool m_are_callbacks_running SingleThreadedSchedulerClient::GUARDED_BY ( m_cs_callbacks_pending  )
private

◆ MaybeScheduleProcessQueue()

void SingleThreadedSchedulerClient::MaybeScheduleProcessQueue ( )
private

◆ ProcessQueue()

void SingleThreadedSchedulerClient::ProcessQueue ( )
private

Member Data Documentation

◆ m_cs_callbacks_pending

CCriticalSection SingleThreadedSchedulerClient::m_cs_callbacks_pending
private

◆ m_pscheduler

CScheduler* SingleThreadedSchedulerClient::m_pscheduler
private

The documentation for this class was generated from the following files: