Home | History | Annotate | Download | only in Support
      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