Renamed ThreadSafeThreadPool to GlobalThreadPool. As of https://github.com/bshoshany/thread-pool/issues/112, the thread pool itself is thread-safe, so we removed the (extra, unnecessary) mutexes around it.
Some checks failed
continuous-integration/drone/push Build is failing

This commit is contained in:
Anne de Jong 2023-06-12 09:11:08 +02:00
parent a58be3ab87
commit 303e15e2d6
6 changed files with 12 additions and 25 deletions

View File

@ -31,7 +31,7 @@ class StreamMgr {
*/ */
std::unique_ptr<Daq> _inputStream, _outputStream; std::unique_ptr<Daq> _inputStream, _outputStream;
ThreadSafeThreadPool _pool; GlobalThreadPool _pool;
/** /**
* @brief All indata handlers are called when input data is available. Note * @brief All indata handlers are called when input data is available. Note

View File

@ -61,7 +61,7 @@ public:
class BiquadBank : public Filter { class BiquadBank : public Filter {
std::vector<SeriesBiquad> _filters; std::vector<SeriesBiquad> _filters;
vd _gains; vd _gains;
ThreadSafeThreadPool _pool; GlobalThreadPool _pool;
mutable std::mutex _mtx; mutable std::mutex _mtx;
public: public:

View File

@ -15,7 +15,7 @@
* channel. A channel is the result of a filtered signal * channel. A channel is the result of a filtered signal
*/ */
class SLM { class SLM {
ThreadSafeThreadPool _pool; GlobalThreadPool _pool;
/** /**
* @brief A, C or Z weighting, depending on the pre-filter installed. * @brief A, C or Z weighting, depending on the pre-filter installed.
*/ */

View File

@ -12,14 +12,15 @@
std::weak_ptr<BS::thread_pool> _global_weak_pool; std::weak_ptr<BS::thread_pool> _global_weak_pool;
/** /**
* @brief Static storage for the mutex. * @brief Global mutex, used to restrict the pool creation to a single thread
* at once.
*/ */
std::mutex ThreadSafeThreadPool::_mtx; std::mutex _mtx;
using Lck = std::scoped_lock<std::mutex>; using Lck = std::scoped_lock<std::mutex>;
using rte = std::runtime_error; using rte = std::runtime_error;
ThreadSafeThreadPool::ThreadSafeThreadPool() { GlobalThreadPool::GlobalThreadPool() {
DEBUGTRACE_ENTER; DEBUGTRACE_ENTER;
Lck lck(_mtx); Lck lck(_mtx);
/// See if we can get it from the global ptr. If not, time to allocate it. /// See if we can get it from the global ptr. If not, time to allocate it.

View File

@ -7,30 +7,21 @@
* safely spawn threads also from other threads. Only wraps a submit() and * safely spawn threads also from other threads. Only wraps a submit() and
* push_task for now. * push_task for now.
*/ */
class ThreadSafeThreadPool { class GlobalThreadPool {
/** /**
* @brief Shared access to the thread pool. * @brief Shared access to the thread pool.
*/ */
std::shared_ptr<BS::thread_pool> _pool; std::shared_ptr<BS::thread_pool> _pool;
/**
* @brief Global mutex, used to restrict pool access to a single thread at
* once.
*/
static std::mutex _mtx;
using Lck = std::scoped_lock<std::mutex>;
ThreadSafeThreadPool(const ThreadSafeThreadPool&) = delete;
ThreadSafeThreadPool &
operator=(const ThreadSafeThreadPool&) = delete;
public: public:
/** /**
* @brief Instantiate handle to the thread pool. * @brief Instantiate handle to the thread pool.
*/ */
ThreadSafeThreadPool(); GlobalThreadPool();
GlobalThreadPool(const GlobalThreadPool &) = default;
GlobalThreadPool &operator=(const GlobalThreadPool &) = default;
/** /**
* @brief Wrapper around BS::thread_pool::submit(...) * @brief Wrapper around BS::thread_pool::submit(...)
*/ */
@ -38,8 +29,6 @@ public:
typename F, typename... A, typename F, typename... A,
typename R = std::invoke_result_t<std::decay_t<F>, std::decay_t<A>...>> typename R = std::invoke_result_t<std::decay_t<F>, std::decay_t<A>...>>
[[nodiscard]] std::future<R> submit(F &&task, A &&...args) { [[nodiscard]] std::future<R> submit(F &&task, A &&...args) {
/// Lock access to pool
Lck lck(_mtx);
return _pool->submit(task, args...); return _pool->submit(task, args...);
} }
@ -47,9 +36,6 @@ public:
* @brief Wrapper around BS::thread_pool::push_task(...) * @brief Wrapper around BS::thread_pool::push_task(...)
*/ */
template <typename F, typename... A> void push_task(F &&task, A &&...args) { template <typename F, typename... A> void push_task(F &&task, A &&...args) {
/// Lock access to pool
Lck lck(_mtx);
_pool->push_task(task, args...); _pool->push_task(task, args...);
} }
}; };

View File

@ -37,7 +37,7 @@ class ThreadedInDataHandlerBase {
std::atomic<bool> _thread_running{false}; std::atomic<bool> _thread_running{false};
std::atomic<bool> _thread_can_safely_run{false}; std::atomic<bool> _thread_can_safely_run{false};
ThreadSafeThreadPool _pool; GlobalThreadPool _pool;
/** /**
* @brief Function pointer that is called when new DaqData arrives. * @brief Function pointer that is called when new DaqData arrives.