// -*- C++ -*- //===----------------------------------------------------------------------===// // // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. // See https://llvm.org/LICENSE.txt for license information. // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception // //===----------------------------------------------------------------------===// #ifndef _LIBCPP_THREAD #define _LIBCPP_THREAD /* thread synopsis namespace std { class thread { public: class id; typedef pthread_t native_handle_type; thread() noexcept; template explicit thread(F&& f, Args&&... args); ~thread(); thread(const thread&) = delete; thread(thread&& t) noexcept; thread& operator=(const thread&) = delete; thread& operator=(thread&& t) noexcept; void swap(thread& t) noexcept; bool joinable() const noexcept; void join(); void detach(); id get_id() const noexcept; native_handle_type native_handle(); static unsigned hardware_concurrency() noexcept; }; void swap(thread& x, thread& y) noexcept; class thread::id { public: id() noexcept; }; bool operator==(thread::id x, thread::id y) noexcept; bool operator!=(thread::id x, thread::id y) noexcept; // removed in C++20 bool operator< (thread::id x, thread::id y) noexcept; // removed in C++20 bool operator<=(thread::id x, thread::id y) noexcept; // removed in C++20 bool operator> (thread::id x, thread::id y) noexcept; // removed in C++20 bool operator>=(thread::id x, thread::id y) noexcept; // removed in C++20 strong_ordering operator<=>(thread::id x, thread::id y) noexcept; // C++20 template basic_ostream& operator<<(basic_ostream& out, thread::id id); template struct formatter; namespace this_thread { thread::id get_id() noexcept; void yield() noexcept; template void sleep_until(const chrono::time_point& abs_time); template void sleep_for(const chrono::duration& rel_time); } // this_thread } // std */ #include <__assert> // all public C++ headers provide the assertion handler #include <__availability> #include <__config> #include <__thread/formatter.h> #include <__thread/this_thread.h> #include <__thread/thread.h> #include <__threading_support> #include // standard-mandated includes // [thread.syn] #include #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER) # pragma GCC system_header #endif #ifdef _LIBCPP_HAS_NO_THREADS # error " is not supported since libc++ has been configured without support for threads." #endif #if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) # include # include # include # include #endif #if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 17 # include #endif #if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20 # include # include # include # include # include #endif #endif // _LIBCPP_THREAD