47 template <
typename Callable>
51 explicit ConcreteTask(Callable&& callable) : callable(std::move(callable)) {}
55 typedef std::function<void(
void)>
FUN;
71 template <
typename Func,
typename... Args>
73 run( Func && func, Args && ... args ) {
76 std::forward<Func>(func),
77 std::forward<Args>(args)...
84 virtual char const *
name()
const = 0;
101 std::function<void()> m_fun;
103 TaskData( std::function<
void()> && f ) : m_fun(std::move(f)) { }
104 TaskData( std::function<
void()> & f ) : m_fun(f) { }
111 mutable std::mutex m_mutex;
112 std::vector<TaskData*> m_queue_data;
114 unsigned m_size, m_capacity;
115 unsigned m_push_ptr{0};
116 unsigned m_pop_ptr{0};
127 : m_queue_data( size_t(
capacity+1 ) )
134 std::lock_guard<std::mutex> lock(m_mutex);
135 m_queue_data[m_push_ptr] = task;
136 if ( ++m_push_ptr == m_size ) m_push_ptr = 0;
141 std::lock_guard<std::mutex> lock(m_mutex);
142 unsigned ipos{m_pop_ptr};
143 if ( ++m_pop_ptr == m_size ) m_pop_ptr = 0;
144 return m_queue_data[ipos];
149 std::lock_guard<std::mutex> lock(m_mutex);
150 return ((m_push_ptr + m_size) - m_pop_ptr) % m_size;
155 std::lock_guard<std::mutex> lock(m_mutex);
156 return m_push_ptr == m_pop_ptr;
160 std::lock_guard<std::mutex> lock(m_mutex);
161 unsigned sz = ((m_push_ptr + m_size) - m_pop_ptr) % m_size;
162 return sz >= m_capacity;
170 std::lock_guard<std::mutex> lock(m_mutex);
171 while( m_push_ptr != m_pop_ptr )
delete pop();
176 std::lock_guard<std::mutex> lock(m_mutex);
177 while( m_push_ptr != m_pop_ptr )
delete pop();
180 m_queue_data.resize( m_size );
ConcreteTask(Callable &&callable)
Definition ThreadPoolBase.hxx:51
void execute() override
Definition ThreadPoolBase.hxx:52
Definition ThreadPoolBase.hxx:41
void run(Func &&func, Args &&... args)
Definition ThreadPoolBase.hxx:73
ThreadPoolBase(ThreadPoolBase const &)=delete
virtual void exec(FUN &&)=0
std::function< void(void)> FUN
Definition ThreadPoolBase.hxx:55
virtual unsigned thread_count() const =0
virtual char const * name() const =0
ThreadPoolBase & operator=(ThreadPoolBase const &)=delete
ThreadPoolBase(ThreadPoolBase &&)=delete
Definition ThreadPoolBase.hxx:100
TaskData(std::function< void()> &&f)
Definition ThreadPoolBase.hxx:103
TaskData(std::function< void()> &f)
Definition ThreadPoolBase.hxx:104
void operator()()
Definition ThreadPoolBase.hxx:105
Queue(unsigned capacity)
Definition ThreadPoolBase.hxx:126
bool empty() const
Definition ThreadPoolBase.hxx:154
void resize(unsigned capacity)
Definition ThreadPoolBase.hxx:175
unsigned capacity() const
Definition ThreadPoolBase.hxx:165
Queue(Queue const &)=delete
void clear()
clear queue and delete tasks
Definition ThreadPoolBase.hxx:169
Queue & operator=(Queue const &)=delete
void push(TaskData *task)
Definition ThreadPoolBase.hxx:133
bool is_full() const
Definition ThreadPoolBase.hxx:159
unsigned size() const
Definition ThreadPoolBase.hxx:148
TaskData * pop()
Definition ThreadPoolBase.hxx:140
Definition ThreadPoolBase.hxx:87
Definition SystemUtils.cc:39