From 2771a18e85bd91dd881f89f6c14d26cba35a1844 Mon Sep 17 00:00:00 2001 From: moneromooo-monero Date: Thu, 26 Apr 2018 11:44:47 +0100 Subject: threadpool: allow leaf functions to run concurrently Decrease the number of worker threads by one to account for the fact the calling thread acts as a worker thread now --- src/common/threadpool.h | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'src/common/threadpool.h') diff --git a/src/common/threadpool.h b/src/common/threadpool.h index bf80a87f6..a43e38a76 100644 --- a/src/common/threadpool.h +++ b/src/common/threadpool.h @@ -59,7 +59,7 @@ public: public: void inc(); void dec(); - void wait(); //! Wait for a set of tasks to finish. + void wait(threadpool *tpool); //! Wait for a set of tasks to finish. waiter() : num(0){} ~waiter(); }; @@ -67,7 +67,7 @@ public: // Submit a task to the pool. The waiter pointer may be // NULL if the caller doesn't care to wait for the // task to finish. - void submit(waiter *waiter, std::function f); + void submit(waiter *waiter, std::function f, bool leaf = false); unsigned int get_max_concurrency() const; @@ -78,6 +78,7 @@ public: typedef struct entry { waiter *wo; std::function f; + bool leaf; } entry; std::deque queue; boost::condition_variable has_work; @@ -86,7 +87,7 @@ public: unsigned int active; unsigned int max; bool running; - void run(); + void run(bool flush = false); }; } -- cgit v1.2.3