From 8d176bbf50c7bc1a421bb857c1c935fe5353c317 Mon Sep 17 00:00:00 2001 From: Mehdi Amini Date: Tue, 15 Dec 2015 00:42:44 +0000 Subject: Revert "Add a C++11 ThreadPool implementation in LLVM" This reverts commit r255589. Breaks g++ From: Mehdi Amini git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@255591 91177308-0d34-0410-b5e6-96231b3b80d8 --- include/llvm/Support/ThreadPool.h | 113 -------------------------------------- include/llvm/Support/thread.h | 2 - 2 files changed, 115 deletions(-) delete mode 100644 include/llvm/Support/ThreadPool.h (limited to 'include') 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 -#include -#include -#include -#include -#include -#include - -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; - // We force it to use bool(bool) instead. - using VoidTy = bool; -#endif - using TaskTy = std::function; - using PackagedTaskTy = std::packaged_task; - - /// 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 - inline std::shared_future async(Function &&F, Args &&... ArgList) { - auto Task = - std::bind(std::forward(F), std::forward(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 - inline std::shared_future async(Function &&F) { -#ifndef _MSC_VER - return asyncImpl(std::forward(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 asyncImpl(TaskTy F); - - /// Threads in flight - std::vector Threads; - - /// Tasks waiting for execution in the pool. - std::queue 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 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 - namespace llvm { struct thread { -- cgit v1.2.3