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{
26public:
27 virtual ~OksJob() { ; }
28 virtual void run(void) = 0;
29};
30
32{
33public:
34 OksPipeline(size_t size);
35
37
38 void waitForCompletion();
39
40 void addJob(OksJob* job);
41
42private:
43 struct Worker
44 {
46 : m_pipeline(pipeline)
47 , m_idle(true)
48 , m_shutdown(false)
49 , m_stop(false)
50 , m_running(false)
51 {
52 ;
53 }
54
55 void run();
56
57 bool setJob(OksJob* job);
58
59 void shutdown();
60
61 void stop();
62
63 private:
65 boost::mutex m_mutex;
66 boost::condition m_condition;
67 bool m_idle;
69 bool m_stop;
72 };
73
74 typedef std::shared_ptr<Worker> WorkerPtr;
75
76private:
77 friend struct Worker;
78
79 bool getJob(OksJob*& job);
80
81private:
82 boost::mutex m_mutex;
83 boost::condition m_condition;
84 boost::barrier m_barrier;
85 boost::thread_group m_pool;
86 std::vector<WorkerPtr> m_workers;
87 std::queue<OksJob*> m_jobs;
88};
89
90} // namespace oks
91} // namespace dunedaq
92#endif
virtual void run(void)=0
boost::condition m_condition
Definition pipeline.hpp:83
std::queue< OksJob * > m_jobs
Definition pipeline.hpp:87
std::vector< WorkerPtr > m_workers
Definition pipeline.hpp:86
bool getJob(OksJob *&job)
Definition pipeline.cpp:126
std::shared_ptr< Worker > WorkerPtr
Definition pipeline.hpp:74
boost::thread_group m_pool
Definition pipeline.hpp:85
void addJob(OksJob *job)
Definition pipeline.cpp:99
boost::barrier m_barrier
Definition pipeline.hpp:84
The DUNE-DAQ namespace.
FELIX Initialization std::string initerror FELIX queue timed std::string queuename Unexpected chunk size
Worker(OksPipeline &pipeline)
Definition pipeline.hpp:45