xref: /aosp_15_r20/external/eigen/unsupported/Eigen/CXX11/ThreadPool (revision bf2c37156dfe67e5dfebd6d394bad8b2ab5804d4)
1*bf2c3715SXin Li// This file is part of Eigen, a lightweight C++ template library
2*bf2c3715SXin Li// for linear algebra.
3*bf2c3715SXin Li//
4*bf2c3715SXin Li// Copyright (C) 2016 Benoit Steiner <[email protected]>
5*bf2c3715SXin Li//
6*bf2c3715SXin Li// This Source Code Form is subject to the terms of the Mozilla
7*bf2c3715SXin Li// Public License v. 2.0. If a copy of the MPL was not distributed
8*bf2c3715SXin Li// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9*bf2c3715SXin Li
10*bf2c3715SXin Li#ifndef EIGEN_CXX11_THREADPOOL_MODULE
11*bf2c3715SXin Li#define EIGEN_CXX11_THREADPOOL_MODULE
12*bf2c3715SXin Li
13*bf2c3715SXin Li#include "../../../Eigen/Core"
14*bf2c3715SXin Li
15*bf2c3715SXin Li#include "../../../Eigen/src/Core/util/DisableStupidWarnings.h"
16*bf2c3715SXin Li
17*bf2c3715SXin Li/** \defgroup CXX11_ThreadPool_Module C++11 ThreadPool Module
18*bf2c3715SXin Li  *
19*bf2c3715SXin Li  * This module provides 2 threadpool implementations
20*bf2c3715SXin Li  *  - a simple reference implementation
21*bf2c3715SXin Li  *  - a faster non blocking implementation
22*bf2c3715SXin Li  *
23*bf2c3715SXin Li  * This module requires C++11.
24*bf2c3715SXin Li  *
25*bf2c3715SXin Li  * \code
26*bf2c3715SXin Li  * #include <Eigen/CXX11/ThreadPool>
27*bf2c3715SXin Li  * \endcode
28*bf2c3715SXin Li  */
29*bf2c3715SXin Li
30*bf2c3715SXin Li
31*bf2c3715SXin Li// The code depends on CXX11, so only include the module if the
32*bf2c3715SXin Li// compiler supports it.
33*bf2c3715SXin Li#if (EIGEN_COMP_CXXVER >= 11)
34*bf2c3715SXin Li#include <cstddef>
35*bf2c3715SXin Li#include <cstring>
36*bf2c3715SXin Li#include <time.h>
37*bf2c3715SXin Li
38*bf2c3715SXin Li#include <vector>
39*bf2c3715SXin Li#include <atomic>
40*bf2c3715SXin Li#include <condition_variable>
41*bf2c3715SXin Li#include <deque>
42*bf2c3715SXin Li#include <mutex>
43*bf2c3715SXin Li#include <thread>
44*bf2c3715SXin Li#include <functional>
45*bf2c3715SXin Li#include <memory>
46*bf2c3715SXin Li#include <utility>
47*bf2c3715SXin Li
48*bf2c3715SXin Li// There are non-parenthesized calls to "max" in the  <unordered_map> header,
49*bf2c3715SXin Li// which trigger a check in test/main.h causing compilation to fail.
50*bf2c3715SXin Li// We work around the check here by removing the check for max in
51*bf2c3715SXin Li// the case where we have to emulate thread_local.
52*bf2c3715SXin Li#ifdef max
53*bf2c3715SXin Li#undef max
54*bf2c3715SXin Li#endif
55*bf2c3715SXin Li#include <unordered_map>
56*bf2c3715SXin Li
57*bf2c3715SXin Li#include "src/util/CXX11Meta.h"
58*bf2c3715SXin Li#include "src/util/MaxSizeVector.h"
59*bf2c3715SXin Li
60*bf2c3715SXin Li#include "src/ThreadPool/ThreadLocal.h"
61*bf2c3715SXin Li#include "src/ThreadPool/ThreadYield.h"
62*bf2c3715SXin Li#include "src/ThreadPool/ThreadCancel.h"
63*bf2c3715SXin Li#include "src/ThreadPool/EventCount.h"
64*bf2c3715SXin Li#include "src/ThreadPool/RunQueue.h"
65*bf2c3715SXin Li#include "src/ThreadPool/ThreadPoolInterface.h"
66*bf2c3715SXin Li#include "src/ThreadPool/ThreadEnvironment.h"
67*bf2c3715SXin Li#include "src/ThreadPool/Barrier.h"
68*bf2c3715SXin Li#include "src/ThreadPool/NonBlockingThreadPool.h"
69*bf2c3715SXin Li
70*bf2c3715SXin Li#endif
71*bf2c3715SXin Li
72*bf2c3715SXin Li#include "../../../Eigen/src/Core/util/ReenableStupidWarnings.h"
73*bf2c3715SXin Li
74*bf2c3715SXin Li#endif // EIGEN_CXX11_THREADPOOL_MODULE
75