30 Thread support library [thread]

30.3 Threads [thread.threads]

30.3.1 Class thread [thread.thread.class]

30.3.1.5 thread members [thread.thread.member]

void swap(thread& x) noexcept;

Effects: Swaps the state of *this and x.

bool joinable() const noexcept;

Returns: get_id() != id()

void join();

Requires: joinable() is true.

Effects: Blocks until the thread represented by *this has completed.

Synchronization: The completion of the thread represented by *this synchronizes with ([intro.multithread]) the corresponding successful join() return. [ Note: Operations on *this are not synchronized.  — end note ]

Postconditions: The thread represented by *this has completed. get_id() == id().

Throws: system_error when an exception is required ([thread.req.exception]).

Error conditions:

  • resource_deadlock_would_occur — if deadlock is detected or this->get_id() == std::this_thread::get_id().

  • no_such_process — if the thread is not valid.

  • invalid_argument — if the thread is not joinable.

void detach();

Requires: joinable() is true.

Effects: The thread represented by *this continues execution without the calling thread blocking. When detach() returns, *this no longer represents the possibly continuing thread of execution. When the thread previously represented by *this ends execution, the implementation shall release any owned resources.

Postcondition: get_id() == id().

Throws: system_error when an exception is required ([thread.req.exception]).

Error conditions:

  • no_such_process — if the thread is not valid.

  • invalid_argument — if the thread is not joinable.

id get_id() const noexcept;

Returns: A default constructed id object if *this does not represent a thread, otherwise this_thread::get_id() for the thread of execution represented by *this.