DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
dunedaq::oks::OksPipeline Class Reference

#include <pipeline.hpp>

Classes

struct  Worker

Public Member Functions

 OksPipeline (size_t size)
 ~OksPipeline ()
void waitForCompletion ()
void addJob (OksJob *job)

Private Types

typedef std::shared_ptr< WorkerWorkerPtr

Private Member Functions

bool getJob (OksJob *&job)

Private Attributes

boost::mutex m_mutex
boost::condition m_condition
boost::barrier m_barrier
boost::thread_group m_pool
std::vector< WorkerPtrm_workers
std::queue< OksJob * > m_jobs

Friends

struct Worker

Detailed Description

Definition at line 33 of file pipeline.hpp.

Member Typedef Documentation

◆ WorkerPtr

typedef std::shared_ptr<Worker> dunedaq::oks::OksPipeline::WorkerPtr
private

Definition at line 75 of file pipeline.hpp.

Constructor & Destructor Documentation

◆ OksPipeline()

dunedaq::oks::OksPipeline::OksPipeline ( size_t size)

Definition at line 81 of file pipeline.cpp.

82 : m_barrier( size + 1 )
83{
84 for ( size_t i = 0; i < size; ++i )
85 {
86 m_workers.push_back( WorkerPtr( new Worker( *this ) ) );
87 m_pool.create_thread( boost::bind( &Worker::run, m_workers.back().get() ) );
88 }
89 m_barrier.wait();
90}
std::vector< WorkerPtr > m_workers
Definition pipeline.hpp:87
std::shared_ptr< Worker > WorkerPtr
Definition pipeline.hpp:75
boost::thread_group m_pool
Definition pipeline.hpp:86
boost::barrier m_barrier
Definition pipeline.hpp:85
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size

◆ ~OksPipeline()

dunedaq::oks::OksPipeline::~OksPipeline ( )

Definition at line 92 of file pipeline.cpp.

93{
95 for ( size_t i = 0; i < m_workers.size(); ++i )
96 {
97 m_workers[i] -> shutdown();
98 }
99 m_pool.join_all();
100}

Member Function Documentation

◆ addJob()

void dunedaq::oks::OksPipeline::addJob ( OksJob * job)

Definition at line 103 of file pipeline.cpp.

104{
105 for ( size_t i = 0; i < m_workers.size(); ++i )
106 {
107 if ( m_workers[i] -> setJob( job ) )
108 {
109 return;
110 }
111 }
112 boost::mutex::scoped_lock lock( m_mutex );
113 m_jobs.push( job );
114}
std::queue< OksJob * > m_jobs
Definition pipeline.hpp:88

◆ getJob()

bool dunedaq::oks::OksPipeline::getJob ( OksJob *& job)
private

Definition at line 134 of file pipeline.cpp.

135{
136 boost::mutex::scoped_lock lock( m_mutex );
137 if ( !m_jobs.empty() )
138 {
139 job = m_jobs.front();
140 m_jobs.pop();
141 m_condition.notify_one( );
142 return true;
143 }
144 return false;
145}
boost::condition m_condition
Definition pipeline.hpp:84

◆ waitForCompletion()

void dunedaq::oks::OksPipeline::waitForCompletion ( )

Definition at line 117 of file pipeline.cpp.

118{
119 {
120 boost::mutex::scoped_lock lock( m_mutex );
121 while ( !m_jobs.empty() )
122 {
123 m_condition.wait( lock );
124 }
125 }
126 for ( size_t i = 0; i < m_workers.size(); ++i )
127 {
128 m_workers[i] -> stop();
129 }
130 m_barrier.wait();
131}

◆ Worker

friend struct Worker
friend

Definition at line 78 of file pipeline.hpp.

Member Data Documentation

◆ m_barrier

boost::barrier dunedaq::oks::OksPipeline::m_barrier
private

Definition at line 85 of file pipeline.hpp.

◆ m_condition

boost::condition dunedaq::oks::OksPipeline::m_condition
private

Definition at line 84 of file pipeline.hpp.

◆ m_jobs

std::queue<OksJob*> dunedaq::oks::OksPipeline::m_jobs
private

Definition at line 88 of file pipeline.hpp.

◆ m_mutex

boost::mutex dunedaq::oks::OksPipeline::m_mutex
private

Definition at line 83 of file pipeline.hpp.

◆ m_pool

boost::thread_group dunedaq::oks::OksPipeline::m_pool
private

Definition at line 86 of file pipeline.hpp.

◆ m_workers

std::vector<WorkerPtr> dunedaq::oks::OksPipeline::m_workers
private

Definition at line 87 of file pipeline.hpp.


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