diff options
author | Mehdi Amini <mehdi.amini@apple.com> | 2015-12-15 00:42:44 +0000 |
---|---|---|
committer | Mehdi Amini <mehdi.amini@apple.com> | 2015-12-15 00:42:44 +0000 |
commit | 8d176bbf50c7bc1a421bb857c1c935fe5353c317 (patch) | |
tree | 67fb814aba8d24c4b21328cfb4d6cc2d64984ae8 /include | |
parent | 04d774cd3866f88864c7146b7102bc5a0cb75f79 (diff) |
Revert "Add a C++11 ThreadPool implementation in LLVM"
This reverts commit r255589. Breaks g++
From: Mehdi Amini <mehdi.amini@apple.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255591 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'include')
-rw-r--r-- | include/llvm/Support/ThreadPool.h | 113 | ||||
-rw-r--r-- | include/llvm/Support/thread.h | 2 |
2 files changed, 0 insertions, 115 deletions
diff --git a/include/llvm/Support/ThreadPool.h b/include/llvm/Support/ThreadPool.h deleted file mode 100644 index 8a90c85865a..00000000000 --- a/include/llvm/Support/ThreadPool.h +++ /dev/null @@ -1,113 +0,0 @@ -//===-- llvm/Support/ThreadPool.h - A ThreadPool implementation -*- C++ -*-===// -// -// The LLVM Compiler Infrastructure -// -// This file is distributed under the University of Illinois Open Source -// License. See LICENSE.TXT for details. -// -//===----------------------------------------------------------------------===// -// -// This file defines a crude C++11 based thread pool. -// -//===----------------------------------------------------------------------===// - -#ifndef LLVM_SUPPORT_THREAD_POOL_H -#define LLVM_SUPPORT_THREAD_POOL_H - -#include "llvm/Support/thread.h" - -#include <condition_variable> -#include <functional> -#include <future> -#include <memory> -#include <mutex> -#include <queue> -#include <utility> - -namespace llvm { - -/// A ThreadPool for asynchronous parallel execution on a defined number of -/// threads. -/// -/// The pool keeps a vector of threads alive, waiting on a condition variable -/// for some work to become available. -class ThreadPool { -public: -#ifndef _MSC_VER - using VoidTy = void; -#else - // MSVC 2013 has a bug and can't use std::packaged_task<void()>; - // We force it to use bool(bool) instead. - using VoidTy = bool; -#endif - using TaskTy = std::function<VoidTy(VoidTy)>; - using PackagedTaskTy = std::packaged_task<VoidTy(VoidTy)>; - - /// Construct a pool with the number of core available on the system (or - /// whatever the value returned by std::thread::hardware_concurrency() is). - ThreadPool(); - - /// Construct a pool of \p ThreadCount threads - ThreadPool(unsigned ThreadCount); - - /// Blocking destructor: the pool will wait for all the threads to complete. - ~ThreadPool(); - - /// 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) { - auto Task = - std::bind(std::forward<Function>(F), std::forward<Args...>(ArgList...)); -#ifndef _MSC_VER - return asyncImpl(std::move(Task)); -#else - return asyncImpl([Task] (VoidTy) -> VoidTy { Task(); return VoidTy(); }); -#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) { -#ifndef _MSC_VER - return asyncImpl(std::forward<Function>(F)); -#else - return asyncImpl([F] (VoidTy) -> VoidTy { F(); return VoidTy(); }); -#endif - } - - /// Blocking wait for all the threads to complete and the queue to be empty. - /// It is an error to try to add new tasks while blocking on this call. - 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); - - /// Threads in flight - std::vector<llvm::thread> Threads; - - /// Tasks waiting for execution in the pool. - std::queue<PackagedTaskTy> Tasks; - - /// Locking and signaling for accessing the Tasks queue. - std::mutex QueueLock; - std::condition_variable QueueCondition; - - /// Locking and signaling for job completion - std::mutex CompletionLock; - std::condition_variable CompletionCondition; - - /// Keep track of the number of thread actually busy - std::atomic<unsigned> ActiveThreads; - -#if LLVM_ENABLE_THREADS // avoids warning for unused variable - /// Signal for the destruction of the pool, asking thread to exit. - bool EnableFlag; -#endif -}; -} - -#endif // LLVM_SUPPORT_THREAD_POOL_H diff --git a/include/llvm/Support/thread.h b/include/llvm/Support/thread.h index 2d130418a57..2d1f1b3a3ec 100644 --- a/include/llvm/Support/thread.h +++ b/include/llvm/Support/thread.h @@ -43,8 +43,6 @@ typedef std::thread thread; #else // !LLVM_ENABLE_THREADS -#include <utility> - namespace llvm { struct thread { |