diff --git a/3party/ThreadPool/COPYING b/3party/ThreadPool/COPYING deleted file mode 100644 index 7d69178f4e..0000000000 --- a/3party/ThreadPool/COPYING +++ /dev/null @@ -1,20 +0,0 @@ -Copyright (c) 2012 Jakob Progsch, Václav Zeman - -This software is provided 'as-is', without any express or implied -warranty. In no event will the authors be held liable for any damages -arising from the use of this software. - -Permission is granted to anyone to use this software for any purpose, -including commercial applications, and to alter it and redistribute it -freely, subject to the following restrictions: - - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - - 3. This notice may not be removed or altered from any source - distribution. diff --git a/3party/ThreadPool/README.md b/3party/ThreadPool/README.md deleted file mode 100644 index be3d25ac4c..0000000000 --- a/3party/ThreadPool/README.md +++ /dev/null @@ -1,17 +0,0 @@ -ThreadPool -========== - -A simple C++11 Thread Pool implementation. - -Basic usage: -```c++ -// create thread pool with 4 worker threads -ThreadPool pool(4); - -// enqueue and store future -auto result = pool.enqueue([](int answer) { return answer; }, 42); - -// get result from future -std::cout << result.get() << std::endl; - -``` diff --git a/3party/ThreadPool/ThreadPool.h b/3party/ThreadPool/ThreadPool.h deleted file mode 100644 index 4183203078..0000000000 --- a/3party/ThreadPool/ThreadPool.h +++ /dev/null @@ -1,98 +0,0 @@ -#ifndef THREAD_POOL_H -#define THREAD_POOL_H - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -class ThreadPool { -public: - ThreadPool(size_t); - template - auto enqueue(F&& f, Args&&... args) - -> std::future::type>; - ~ThreadPool(); -private: - // need to keep track of threads so we can join them - std::vector< std::thread > workers; - // the task queue - std::queue< std::function > tasks; - - // synchronization - std::mutex queue_mutex; - std::condition_variable condition; - bool stop; -}; - -// the constructor just launches some amount of workers -inline ThreadPool::ThreadPool(size_t threads) - : stop(false) -{ - for(size_t i = 0;i task; - - { - std::unique_lock lock(this->queue_mutex); - this->condition.wait(lock, - [this]{ return this->stop || !this->tasks.empty(); }); - if(this->stop && this->tasks.empty()) - return; - task = std::move(this->tasks.front()); - this->tasks.pop(); - } - - task(); - } - } - ); -} - -// add new work item to the pool -template -auto ThreadPool::enqueue(F&& f, Args&&... args) - -> std::future::type> -{ - using return_type = typename std::result_of::type; - - auto task = std::make_shared< std::packaged_task >( - std::bind(std::forward(f), std::forward(args)...) - ); - - std::future res = task->get_future(); - { - std::unique_lock lock(queue_mutex); - - // don't allow enqueueing after stopping the pool - if(stop) - throw std::runtime_error("enqueue on stopped ThreadPool"); - - tasks.emplace([task](){ (*task)(); }); - } - condition.notify_one(); - return res; -} - -// the destructor joins all threads -inline ThreadPool::~ThreadPool() -{ - { - std::unique_lock lock(queue_mutex); - stop = true; - } - condition.notify_all(); - for(std::thread &worker: workers) - worker.join(); -} - -#endif diff --git a/3party/ThreadPool/example.cpp b/3party/ThreadPool/example.cpp deleted file mode 100644 index 837277b99d..0000000000 --- a/3party/ThreadPool/example.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include -#include -#include - -#include "ThreadPool.h" - -int main() -{ - - ThreadPool pool(4); - std::vector< std::future > results; - - for(int i = 0; i < 8; ++i) { - results.emplace_back( - pool.enqueue([i] { - std::cout << "hello " << i << std::endl; - std::this_thread::sleep_for(std::chrono::seconds(1)); - std::cout << "world " << i << std::endl; - return i*i; - }) - ); - } - - for(auto && result: results) - std::cout << result.get() << ' '; - std::cout << std::endl; - - return 0; -}