mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Return -1 from CurrentThreadId when called by thread outside the pool.
This commit is contained in:
@@ -99,13 +99,13 @@ class NonBlockingThreadPoolTempl : public Eigen::ThreadPoolInterface {
|
||||
return static_cast<int>(threads_.size());
|
||||
}
|
||||
|
||||
int CurrentThreadId() const {
|
||||
int CurrentThreadId() const final {
|
||||
const PerThread* pt =
|
||||
const_cast<NonBlockingThreadPoolTempl*>(this)->GetPerThread();
|
||||
if (pt->pool == this) {
|
||||
return pt->thread_id;
|
||||
} else {
|
||||
return NumThreads();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -113,10 +113,10 @@ class NonBlockingThreadPoolTempl : public Eigen::ThreadPoolInterface {
|
||||
typedef typename Environment::EnvThread Thread;
|
||||
|
||||
struct PerThread {
|
||||
constexpr PerThread() : pool(NULL), index(-1), rand(0) { }
|
||||
constexpr PerThread() : pool(NULL), rand(0), thread_id(-1) { }
|
||||
NonBlockingThreadPoolTempl* pool; // Parent pool, or null for normal threads.
|
||||
int thread_id; // Worker thread index in pool.
|
||||
uint64_t rand; // Random generator state.
|
||||
uint64_t rand; // Random generator state.
|
||||
int thread_id; // Worker thread index in pool.
|
||||
};
|
||||
|
||||
Environment env_;
|
||||
|
||||
@@ -78,7 +78,7 @@ class SimpleThreadPoolTempl : public ThreadPoolInterface {
|
||||
if (pt->pool == this) {
|
||||
return pt->thread_id;
|
||||
} else {
|
||||
return NumThreads();
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -128,8 +128,9 @@ class SimpleThreadPoolTempl : public ThreadPoolInterface {
|
||||
};
|
||||
|
||||
struct PerThread {
|
||||
ThreadPoolTempl* pool; // Parent pool, or null for normal threads.
|
||||
int thread_id; // Worker thread index in pool.
|
||||
constexpr PerThread() : pool(NULL), thread_id(-1) { }
|
||||
SimpleThreadPoolTempl* pool; // Parent pool, or null for normal threads.
|
||||
int thread_id; // Worker thread index in pool.
|
||||
};
|
||||
|
||||
Environment env_;
|
||||
@@ -141,7 +142,7 @@ class SimpleThreadPoolTempl : public ThreadPoolInterface {
|
||||
bool exiting_ = false;
|
||||
|
||||
PerThread* GetPerThread() const {
|
||||
static EIGEN_THREAD_LOCAL PerThread per_thread;
|
||||
EIGEN_THREAD_LOCAL PerThread per_thread;
|
||||
return &per_thread;
|
||||
}
|
||||
};
|
||||
|
||||
@@ -22,7 +22,7 @@ class ThreadPoolInterface {
|
||||
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 NumThreads() otherwise.
|
||||
// from one of the threads in the pool. Returns -1 otherwise.
|
||||
virtual int CurrentThreadId() const = 0;
|
||||
|
||||
virtual ~ThreadPoolInterface() {}
|
||||
|
||||
Reference in New Issue
Block a user