DUNE-DAQ
DUNE Trigger and Data Acquisition software
Loading...
Searching...
No Matches
pipeline.hpp
Go to the documentation of this file.
1// DUNE DAQ modification notice:
2// This file has been modified from the original ATLAS oks source for the DUNE DAQ project.
3// Fork baseline commit: oks-08-03-04 (2022-04-14).
4// Renamed since fork: yes (from oks/pipeline.h to include/oks/pipeline.hpp).
5
6#ifndef OKS_PIPELINE_H
7#define OKS_PIPELINE_H
8
10//
11// copy from IPC
12//
14
15#include <boost/thread.hpp>
16#include <boost/thread/barrier.hpp>
17#include <boost/thread/condition.hpp>
18#include <memory>
19#include <queue>
20
21namespace dunedaq {
22namespace oks {
23
24class OksJob
25{
26 public:
27
28 virtual ~OksJob() { ; }
29 virtual void run(void) = 0;
30
31};
32
34{
35 public:
36 OksPipeline( size_t size );
37
39
40 void waitForCompletion();
41
42 void addJob( OksJob * job );
43
44 private:
45
46 struct Worker
47 {
48 Worker( OksPipeline & pipeline )
49 : m_pipeline( pipeline ),
50 m_idle( true ),
51 m_shutdown( false ),
52 m_stop( false ),
53 m_running( false )
54 { ; }
55
56 void run();
57
58 bool setJob( OksJob * job );
59
60 void shutdown();
61
62 void stop();
63
64 private:
66 boost::mutex m_mutex;
67 boost::condition m_condition;
68 bool m_idle;
70 bool m_stop;
73 };
74
75 typedef std::shared_ptr<Worker> WorkerPtr;
76
77 private:
78 friend struct Worker;
79
80 bool getJob( OksJob* & job );
81
82 private:
83 boost::mutex m_mutex;
84 boost::condition m_condition;
85 boost::barrier m_barrier;
86 boost::thread_group m_pool;
87 std::vector<WorkerPtr> m_workers;
88 std::queue<OksJob*> m_jobs;
89};
90
91} // namespace oks
92} // namespace dunedaq
93#endif
virtual void run(void)=0
boost::condition m_condition
Definition pipeline.hpp:84
std::queue< OksJob * > m_jobs
Definition pipeline.hpp:88
std::vector< WorkerPtr > m_workers
Definition pipeline.hpp:87
bool getJob(OksJob *&job)
Definition pipeline.cpp:134
std::shared_ptr< Worker > WorkerPtr
Definition pipeline.hpp:75
boost::thread_group m_pool
Definition pipeline.hpp:86
void addJob(OksJob *job)
Definition pipeline.cpp:103
boost::barrier m_barrier
Definition pipeline.hpp:85
Including Qt Headers.
Definition module.cpp:16
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size
Worker(OksPipeline &pipeline)
Definition pipeline.hpp:48