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