diff options
author | Davide Italiano <davide@freebsd.org> | 2016-11-28 08:53:41 +0000 |
---|---|---|
committer | Davide Italiano <davide@freebsd.org> | 2016-11-28 08:53:41 +0000 |
commit | 3ea0bfa7e02808637eca838933aee980cc1c1d88 (patch) | |
tree | 689f58652be98d73eca2c64d7986043da665ec19 | |
parent | 43c24282039f03caabf7a7b2196d22a076f5b592 (diff) | |
download | bcm5719-llvm-3ea0bfa7e02808637eca838933aee980cc1c1d88.tar.gz bcm5719-llvm-3ea0bfa7e02808637eca838933aee980cc1c1d88.zip |
[ThreadPool] Simplify the interface. NFCI.
The callers don't use the return value. Found by Michael
Spencer.
llvm-svn: 288016
-rw-r--r-- | llvm/include/llvm/Support/ThreadPool.h | 20 | ||||
-rw-r--r-- | llvm/lib/Support/ThreadPool.cpp | 6 | ||||
-rw-r--r-- | llvm/unittests/Support/ThreadPool.cpp | 16 |
3 files changed, 10 insertions, 32 deletions
diff --git a/llvm/include/llvm/Support/ThreadPool.h b/llvm/include/llvm/Support/ThreadPool.h index 665cec2465b..9e948a0e9ee 100644 --- a/llvm/include/llvm/Support/ThreadPool.h +++ b/llvm/include/llvm/Support/ThreadPool.h @@ -75,29 +75,26 @@ public: /// Asynchronous submission of a task to the pool. The returned future can be /// used to wait for the task to finish and is *non-blocking* on destruction. template <typename Function, typename... Args> - inline std::shared_future<VoidTy> async(Function &&F, Args &&... ArgList) { + inline void async(Function &&F, Args &&... ArgList) { auto Task = std::bind(std::forward<Function>(F), std::forward<Args>(ArgList)...); #ifndef _MSC_VER - return asyncImpl(std::move(Task)); + asyncImpl(std::move(Task)); #else // This lambda has to be marked mutable because MSVC 2013's std::bind call // operator isn't const qualified. - return asyncImpl([Task](VoidTy) mutable -> VoidTy { - Task(); - return VoidTy(); - }); + asyncImpl([Task](VoidTy) mutable { Task(); }); #endif } /// Asynchronous submission of a task to the pool. The returned future can be /// used to wait for the task to finish and is *non-blocking* on destruction. template <typename Function> - inline std::shared_future<VoidTy> async(Function &&F) { + inline void async(Function &&F) { #ifndef _MSC_VER - return asyncImpl(std::forward<Function>(F)); + asyncImpl(std::forward<Function>(F)); #else - return asyncImpl([F] (VoidTy) -> VoidTy { F(); return VoidTy(); }); + asyncImpl([F] (VoidTy) { F(); }); #endif } @@ -106,9 +103,8 @@ public: void wait(); private: - /// Asynchronous submission of a task to the pool. The returned future can be - /// used to wait for the task to finish and is *non-blocking* on destruction. - std::shared_future<VoidTy> asyncImpl(TaskTy F); + /// Asynchronous submission of a task to the pool. + void asyncImpl(TaskTy F); /// Threads in flight std::vector<llvm::thread> Threads; diff --git a/llvm/lib/Support/ThreadPool.cpp b/llvm/lib/Support/ThreadPool.cpp index db03a4d6240..022f32a1378 100644 --- a/llvm/lib/Support/ThreadPool.cpp +++ b/llvm/lib/Support/ThreadPool.cpp @@ -82,7 +82,7 @@ void ThreadPool::wait() { [&] { return !ActiveThreads && Tasks.empty(); }); } -std::shared_future<ThreadPool::VoidTy> ThreadPool::asyncImpl(TaskTy Task) { +void ThreadPool::asyncImpl(TaskTy Task) { /// Wrap the Task in a packaged_task to return a future object. PackagedTaskTy PackagedTask(std::move(Task)); auto Future = PackagedTask.get_future(); @@ -96,7 +96,6 @@ std::shared_future<ThreadPool::VoidTy> ThreadPool::asyncImpl(TaskTy Task) { Tasks.push(std::move(PackagedTask)); } QueueCondition.notify_one(); - return Future.share(); } // The destructor joins all threads, waiting for completion. @@ -136,7 +135,7 @@ void ThreadPool::wait() { } } -std::shared_future<ThreadPool::VoidTy> ThreadPool::asyncImpl(TaskTy Task) { +void ThreadPool::asyncImpl(TaskTy Task) { #ifndef _MSC_VER // Get a Future with launch::deferred execution using std::async auto Future = std::async(std::launch::deferred, std::move(Task)).share(); @@ -148,7 +147,6 @@ std::shared_future<ThreadPool::VoidTy> ThreadPool::asyncImpl(TaskTy Task) { PackagedTaskTy PackagedTask([Future](bool) -> bool { Future.get(); return false; }); #endif Tasks.push(std::move(PackagedTask)); - return Future; } ThreadPool::~ThreadPool() { diff --git a/llvm/unittests/Support/ThreadPool.cpp b/llvm/unittests/Support/ThreadPool.cpp index 8e03aacfb1e..bb972f7daa9 100644 --- a/llvm/unittests/Support/ThreadPool.cpp +++ b/llvm/unittests/Support/ThreadPool.cpp @@ -131,22 +131,6 @@ TEST_F(ThreadPoolTest, Async) { ASSERT_EQ(2, i.load()); } -TEST_F(ThreadPoolTest, GetFuture) { - CHECK_UNSUPPORTED(); - ThreadPool Pool{2}; - std::atomic_int i{0}; - Pool.async([this, &i] { - waitForMainThread(); - ++i; - }); - // Force the future using get() - Pool.async([&i] { ++i; }).get(); - ASSERT_NE(2, i.load()); - setMainThreadReady(); - Pool.wait(); - ASSERT_EQ(2, i.load()); -} - TEST_F(ThreadPoolTest, PoolDestruction) { CHECK_UNSUPPORTED(); // Test that we are waiting on destruction |