ThreadPool.h
Go to the documentation of this file.
// This file is a part of the OpenSurgSim project.
// Copyright 2013, SimQuest Solutions Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#ifndef SURGSIM_FRAMEWORK_THREADPOOL_H
#define SURGSIM_FRAMEWORK_THREADPOOL_H
#include <atomic>
#include <boost/thread.hpp>
#include <functional>
#include <future>
#include <list>
#include <memory>
#include <queue>
namespace SurgSim
{
namespace Framework
{
class ThreadPool
{
public:
explicit ThreadPool(size_t numThreads = boost::thread::hardware_concurrency());
~ThreadPool();
template <class R>
std::future<R> enqueue(std::function<R()> function);
private:
ThreadPool(const ThreadPool& other);
ThreadPool& operator=(const ThreadPool& other);
class TaskBase;
template<class R>
class Task;
std::list<boost::thread> m_threads;
std::queue<std::unique_ptr<TaskBase>> m_tasks;
boost::mutex m_mutex;
boost::condition_variable m_threadSignaler;
std::atomic<bool> m_destructing;
};
};
};
#include "SurgSim/Framework/ThreadPool-inl.h"
#endif //SURGSIM_FRAMEWORK_THREADPOOL_H
SurgSim
Definition: CompoundShapeToGraphics.cpp:29
SurgSim::Framework::ThreadPool::Task
Actual tasks, with typed return type.
Definition: ThreadPool-inl.h:34
SurgSim::Framework::ThreadPool::TaskBase
Definition: ThreadPool-inl.h:25
SurgSim::Framework::ThreadPool::m_tasks
std::queue< std::unique_ptr< TaskBase > > m_tasks
Queued tasks waiting for an available thread.
Definition: ThreadPool.h:102
SurgSim::Framework::ThreadPool::ThreadPool
ThreadPool(size_t numThreads=boost::thread::hardware_concurrency())
Constructor.
Definition: ThreadPool.cpp:24
SurgSim::Framework::ThreadPool::enqueue
std::future< R > enqueue(std::function< R()> function)
Queue a task to be run by the ThreadPool.
Definition: ThreadPool-inl.h:57
SurgSim::Framework::ThreadPool::operator=
ThreadPool & operator=(const ThreadPool &other)
SurgSim::Framework::ThreadPool::m_destructing
std::atomic< bool > m_destructing
True if the ThreadPool is destructing.
Definition: ThreadPool.h:111
SurgSim::Framework::ThreadPool
A thread pool for completing heterogenous tasks.
Definition: ThreadPool.h:65
SurgSim::Framework::ThreadPool::m_threads
std::list< boost::thread > m_threads
The worker threads.
Definition: ThreadPool.h:96
SurgSim::Framework::ThreadPool::m_mutex
boost::mutex m_mutex
Mutex for protecting the tasks queue.
Definition: ThreadPool.h:105
ThreadPool-inl.h
SurgSim::Framework::ThreadPool::~ThreadPool
~ThreadPool()
Desctructor.
Definition: ThreadPool.cpp:54
SurgSim::Framework::ThreadPool::m_threadSignaler
boost::condition_variable m_threadSignaler
Signaler for waking up threads waiting for tasks.
Definition: ThreadPool.h:108