1 //===-- llvm/Support/thread.h - Wrapper for <thread> ------------*- C++ -*-===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 // 10 // This header is a wrapper for <thread> that works around problems with the 11 // MSVC headers when exceptions are disabled. It also provides llvm::thread, 12 // which is either a typedef of std::thread or a replacement that calls the 13 // function synchronously depending on the value of LLVM_ENABLE_THREADS. 14 // 15 //===----------------------------------------------------------------------===// 16 17 #ifndef LLVM_SUPPORT_THREAD_H 18 #define LLVM_SUPPORT_THREAD_H 19 20 #include "llvm/Config/llvm-config.h" 21 22 #if LLVM_ENABLE_THREADS 23 24 #include <thread> 25 26 namespace llvm { 27 typedef std::thread thread; 28 } 29 30 #else // !LLVM_ENABLE_THREADS 31 32 #include <utility> 33 34 namespace llvm { 35 36 struct thread { 37 thread() {} 38 thread(thread &&other) {} 39 template <class Function, class... Args> 40 explicit thread(Function &&f, Args &&... args) { 41 f(std::forward<Args>(args)...); 42 } 43 thread(const thread &) = delete; 44 45 void join() {} 46 static unsigned hardware_concurrency() { return 1; }; 47 }; 48 49 } 50 51 #endif // LLVM_ENABLE_THREADS 52 53 #endif 54