diff options
author | Benoit Steiner <benoit.steiner.goog@gmail.com> | 2016-04-14 15:23:10 -0700 |
---|---|---|
committer | Benoit Steiner <benoit.steiner.goog@gmail.com> | 2016-04-14 15:23:10 -0700 |
commit | 78a51abc123dff49d6e1b1a6dd5b193e92ae0817 (patch) | |
tree | 81b653f81785ed9276ed82de0c0ffc51e4e71873 /unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h | |
parent | 7718749fee835095f0671fa6ce5d257609f8e56b (diff) |
Added a more scalable non blocking thread pool
Diffstat (limited to 'unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h')
-rw-r--r-- | unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h b/unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h new file mode 100644 index 000000000..d2204ad5b --- /dev/null +++ b/unsupported/Eigen/CXX11/src/ThreadPool/ThreadEnvironment.h @@ -0,0 +1,38 @@ +// This file is part of Eigen, a lightweight C++ template library +// for linear algebra. +// +// Copyright (C) 2014 Benoit Steiner <benoit.steiner.goog@gmail.com> +// +// This Source Code Form is subject to the terms of the Mozilla +// Public License v. 2.0. If a copy of the MPL was not distributed +// with this file, You can obtain one at http://mozilla.org/MPL/2.0/. + +#ifndef EIGEN_CXX11_THREADPOOL_THREAD_ENVIRONMENT_H +#define EIGEN_CXX11_THREADPOOL_THREAD_ENVIRONMENT_H + +namespace Eigen { + +struct StlThreadEnvironment { + struct Task { + std::function<void()> f; + }; + + // EnvThread constructor must start the thread, + // destructor must join the thread. + class EnvThread { + public: + EnvThread(std::function<void()> f) : thr_(f) {} + ~EnvThread() { thr_.join(); } + + private: + std::thread thr_; + }; + + EnvThread* CreateThread(std::function<void()> f) { return new EnvThread(f); } + Task CreateTask(std::function<void()> f) { return Task{std::move(f)}; } + void ExecuteTask(const Task& t) { t.f(); } +}; + +} // namespace Eigen + +#endif // EIGEN_CXX11_THREADPOOL_THREAD_ENVIRONMENT_H |