[thread.thread.id] (original) (raw)

32 Concurrency support library [thread]

32.4 Threads [thread.threads]

32.4.3 Class thread [thread.thread.class]

32.4.3.2 Class thread​::​id [thread.thread.id]

namespace std { class thread::id { public: id() noexcept;};bool operator==(thread::id x, thread::id y) noexcept; strong_ordering operator<=>(thread::id x, thread::id y) noexcept;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>;template<class T> struct hash;template<> struct hashthread::id\;}

An object of type thread​::​id provides a unique identifier for each thread of execution and a single distinct value for all threadobjects that do not represent a thread of execution ([thread.thread.class]).

Each thread of execution has an associated thread​::​id object that is not equal to thethread​::​id object of any other thread of execution and that is not equal to the thread​::​id object of any thread object that does not represent threads of execution.

The text representation for the character type charT of an object of type thread​::​idis an unspecified sequence of charT such that, for two objects of type thread​::​id x and y, if x == y is true, the thread​::​id objects have the same text representation, and if x != y is true, the thread​::​id objects have distinct text representations.

thread​::​id is a trivially copyable class ([class.prop]).

The library may reuse the value of a thread​::​id of a terminated thread that can no longer be joined.

[Note 1:

Relational operators allow thread​::​id objects to be used as keys in associative containers.

— _end note_]

Postconditions: The constructed object does not represent a thread of execution.

bool operator==(thread::id x, thread::id y) noexcept;

Returns: true only if x and y represent the same thread of execution or neither x nor y represents a thread of execution.

strong_ordering operator<=>(thread::id x, thread::id y) noexcept;

Let P(x, y) be an unspecified total ordering over thread​::​idas described in [alg.sorting].

Returns: strong_ordering​::​less if P(x, y) is true.

Otherwise, strong_ordering​::​greaterif P(y, x) is true.

Otherwise, strong_ordering​::​equal.

template<class charT, class traits> basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& out, thread::id id);

Effects: Inserts the text representation for charT of id intoout.

template<class charT> struct formatter<thread::id, charT>;

formatter<thread​::​id, charT> interprets _format-spec_as a thread-id-format-spec.

The syntax of format specifications is as follows:

thread-id-format-spec :
fill-and-align width

[Note 2:

The productions fill-and-align and _width_are described in [format.string.std].

— _end note_]

If the align option is omitted it defaults to >.

A thread​::​id object is formatted by writing its text representation for charT to the output with additional padding and adjustments as specified by the format specifiers.

template<> struct hash<thread::id>;