SourceXtractorPlusPlus
0.13
Please provide a description of the project.
SEImplementation
SEImplementation
Measurement
MultithreadedMeasurement.h
Go to the documentation of this file.
1
17
/*
18
* Multithreadedmeasurement->h
19
*
20
* Created on: May 17, 2018
21
* Author: mschefer
22
*/
23
24
#ifndef _SEIMPLEMENTATION_OUTPUT_MULTITHREADEDMEASUREMENT_H_
25
#define _SEIMPLEMENTATION_OUTPUT_MULTITHREADEDMEASUREMENT_H_
26
27
#include <atomic>
28
#include <thread>
29
#include <mutex>
30
#include <condition_variable>
31
#include <atomic>
32
#include <
AlexandriaKernel/ThreadPool.h
>
33
#include "
SEFramework/Pipeline/Measurement.h
"
34
35
namespace
SourceXtractor
{
36
37
class
MultithreadedMeasurement
:
public
Measurement
{
38
public
:
39
40
using
SourceToRowConverter
=
std::function
<
Euclid::Table::Row
(
const
SourceInterface
&)>;
41
MultithreadedMeasurement
(
SourceToRowConverter
source_to_row,
const
std::shared_ptr<Euclid::ThreadPool>
& thread_pool)
42
:
m_source_to_row
(source_to_row),
43
m_thread_pool
(thread_pool),
44
m_group_counter
(0),
45
m_input_done
(false),
m_abort_raised
(false) {}
46
47
void
handleMessage
(
const
std::shared_ptr<SourceGroupInterface>
& source_group)
override
;
48
49
void
startThreads
()
override
;
50
void
waitForThreads
()
override
;
51
52
public
:
53
static
std::recursive_mutex
g_global_mutex
;
54
55
private
:
56
static
void
outputThreadStatic
(
MultithreadedMeasurement
* measurement);
57
void
outputThreadLoop
();
58
59
SourceToRowConverter
m_source_to_row
;
60
std::shared_ptr<Euclid::ThreadPool>
m_thread_pool
;
61
std::unique_ptr<std::thread>
m_output_thread
;
62
63
int
m_group_counter
;
64
std::atomic_bool
m_input_done
,
m_abort_raised
;
65
66
std::condition_variable
m_new_output
;
67
std::list<std::pair<int, std::shared_ptr<SourceGroupInterface>
>>
m_output_queue
;
68
std::mutex
m_output_queue_mutex
;
69
};
70
71
}
72
73
#endif
/* _SEIMPLEMENTATION_OUTPUT_MULTITHREADEDMEASUREMENT_H_ */
std::shared_ptr< Euclid::ThreadPool >
std::list
STL class.
std::recursive_mutex
STL class.
SourceXtractor::MultithreadedMeasurement::handleMessage
void handleMessage(const std::shared_ptr< SourceGroupInterface > &source_group) override
Definition:
MultithreadedMeasurement.cpp:49
SourceXtractor::MultithreadedMeasurement::outputThreadStatic
static void outputThreadStatic(MultithreadedMeasurement *measurement)
Definition:
MultithreadedMeasurement.cpp:72
SourceXtractor::MultithreadedMeasurement::m_input_done
std::atomic_bool m_input_done
Definition:
MultithreadedMeasurement.h:64
std::function< Euclid::Table::Row(const SourceInterface &)>
SourceXtractor::MultithreadedMeasurement::g_global_mutex
static std::recursive_mutex g_global_mutex
Definition:
MultithreadedMeasurement.h:53
SourceXtractor::MultithreadedMeasurement::m_thread_pool
std::shared_ptr< Euclid::ThreadPool > m_thread_pool
Definition:
MultithreadedMeasurement.h:60
SourceXtractor::Measurement
Definition:
Measurement.h:36
SourceXtractor::MultithreadedMeasurement::outputThreadLoop
void outputThreadLoop()
Definition:
MultithreadedMeasurement.cpp:88
SourceXtractor
Definition:
Aperture.h:30
SourceXtractor::MultithreadedMeasurement::MultithreadedMeasurement
MultithreadedMeasurement(SourceToRowConverter source_to_row, const std::shared_ptr< Euclid::ThreadPool > &thread_pool)
Definition:
MultithreadedMeasurement.h:41
SourceXtractor::MultithreadedMeasurement::m_abort_raised
std::atomic_bool m_abort_raised
Definition:
MultithreadedMeasurement.h:64
Measurement.h
SourceXtractor::MultithreadedMeasurement::m_source_to_row
SourceToRowConverter m_source_to_row
Definition:
MultithreadedMeasurement.h:59
SourceXtractor::MultithreadedMeasurement::m_output_queue_mutex
std::mutex m_output_queue_mutex
Definition:
MultithreadedMeasurement.h:68
SourceXtractor::MultithreadedMeasurement::m_new_output
std::condition_variable m_new_output
Definition:
MultithreadedMeasurement.h:66
SourceXtractor::MultithreadedMeasurement::m_output_queue
std::list< std::pair< int, std::shared_ptr< SourceGroupInterface > > > m_output_queue
Definition:
MultithreadedMeasurement.h:67
SourceXtractor::MultithreadedMeasurement::waitForThreads
void waitForThreads() override
Definition:
MultithreadedMeasurement.cpp:41
std::condition_variable
ThreadPool.h
std::mutex
STL class.
Euclid::Table::Row
SourceXtractor::MultithreadedMeasurement::m_output_thread
std::unique_ptr< std::thread > m_output_thread
Definition:
MultithreadedMeasurement.h:61
SourceXtractor::MultithreadedMeasurement::startThreads
void startThreads() override
Definition:
MultithreadedMeasurement.cpp:37
SourceXtractor::SourceInterface
The SourceInterface is an abstract "source" that has properties attached to it.
Definition:
SourceInterface.h:46
SourceXtractor::MultithreadedMeasurement
Definition:
MultithreadedMeasurement.h:37
std::unique_ptr< std::thread >
SourceXtractor::MultithreadedMeasurement::m_group_counter
int m_group_counter
Definition:
MultithreadedMeasurement.h:63
Generated by
1.8.20