123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 |
- // -*- 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 <class F, class ...Args> 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<class charT, class traits>
- basic_ostream<charT, traits>&
- operator<<(basic_ostream<charT, traits>& out, thread::id id);
- template<class charT>
- struct formatter<thread::id, charT>;
- namespace this_thread
- {
- thread::id get_id() noexcept;
- void yield() noexcept;
- template <class Clock, class Duration>
- void sleep_until(const chrono::time_point<Clock, Duration>& abs_time);
- template <class Rep, class Period>
- void sleep_for(const chrono::duration<Rep, Period>& 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/jthread.h>
- #include <__thread/this_thread.h>
- #include <__thread/thread.h>
- #include <__threading_support>
- #include <version>
- // standard-mandated includes
- // [thread.syn]
- #include <compare>
- #if !defined(_LIBCPP_HAS_NO_PRAGMA_SYSTEM_HEADER)
- # pragma GCC system_header
- #endif
- #ifdef _LIBCPP_HAS_NO_THREADS
- # error "<thread> is not supported since libc++ has been configured without support for threads."
- #endif
- #if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES)
- # include <cstddef>
- # include <ctime>
- # include <iosfwd>
- # include <ratio>
- #endif
- #if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 17
- # include <chrono>
- #endif
- #if !defined(_LIBCPP_REMOVE_TRANSITIVE_INCLUDES) && _LIBCPP_STD_VER <= 20
- # include <cstring>
- # include <functional>
- # include <new>
- # include <system_error>
- # include <type_traits>
- #endif
- #endif // _LIBCPP_THREAD
|