You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
48 lines
1.6 KiB
48 lines
1.6 KiB
// 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 the mozilla.org home page |
|
|
|
#ifndef EIGEN_CXX11_THREADPOOL_THREAD_POOL_INTERFACE_H |
|
#define EIGEN_CXX11_THREADPOOL_THREAD_POOL_INTERFACE_H |
|
|
|
namespace Eigen { |
|
|
|
// This defines an interface that ThreadPoolDevice can take to use |
|
// custom thread pools underneath. |
|
class ThreadPoolInterface { |
|
public: |
|
// Submits a closure to be run by a thread in the pool. |
|
virtual void Schedule(std::function<void()> fn) = 0; |
|
|
|
// Submits a closure to be run by threads in the range [start, end) in the |
|
// pool. |
|
virtual void ScheduleWithHint(std::function<void()> fn, int /*start*/, |
|
int /*end*/) { |
|
// Just defer to Schedule in case sub-classes aren't interested in |
|
// overriding this functionality. |
|
Schedule(fn); |
|
} |
|
|
|
// If implemented, stop processing the closures that have been enqueued. |
|
// Currently running closures may still be processed. |
|
// If not implemented, does nothing. |
|
virtual void Cancel() {} |
|
|
|
// Returns the number of threads in the pool. |
|
virtual int NumThreads() const = 0; |
|
|
|
// Returns a logical thread index between 0 and NumThreads() - 1 if called |
|
// from one of the threads in the pool. Returns -1 otherwise. |
|
virtual int CurrentThreadId() const = 0; |
|
|
|
virtual ~ThreadPoolInterface() {} |
|
}; |
|
|
|
} // namespace Eigen |
|
|
|
#endif // EIGEN_CXX11_THREADPOOL_THREAD_POOL_INTERFACE_H
|
|
|