33 Thread support library [thread]

33.3 Threads [thread.threads]

33.3.2 Class thread [thread.thread.class] thread constructors [thread.thread.constr]

thread() noexcept;

Effects: Constructs a thread object that does not represent a thread of execution.

Postconditions: get_­id() == id().

template <class F, class... Args> explicit thread(F&& f, Args&&... args);

Requires:  F and each Ti in Args shall satisfy the MoveConstructible requirements. INVOKE(​DECAY_­COPY(​std​::​forward<F>(f)), DECAY_­COPY(​std​::​forward<Args>(​args))...) ([func.require]) shall be a valid expression.

Remarks: This constructor shall not participate in overload resolution if decay_­t<F> is the same type as std​::​thread.

Effects:  Constructs an object of type thread. The new thread of execution executes INVOKE(​DECAY_­COPY(​std​::​forward<F>(f)), DECAY_­COPY(​std​::​forward<Args>(​args))...) with the calls to DECAY_­COPY being evaluated in the constructing thread. Any return value from this invocation is ignored. [Note: This implies that any exceptions not thrown from the invocation of the copy of f will be thrown in the constructing thread, not the new thread. end note] If the invocation of INVOKE(​DECAY_­COPY(​std​::​forward<F>(f)), DECAY_­COPY(​std​::​forward<Args>(args))...) terminates with an uncaught exception, terminate shall be called.

Synchronization: The completion of the invocation of the constructor synchronizes with the beginning of the invocation of the copy of f.

Postconditions: get_­id() != id(). *this represents the newly started thread.

Throws: system_­error if unable to start the new thread.

Error conditions:

  • resource_­unavailable_­try_­again — the system lacked the necessary resources to create another thread, or the system-imposed limit on the number of threads in a process would be exceeded.

thread(thread&& x) noexcept;

Effects: Constructs an object of type thread from x, and sets x to a default constructed state.

Postconditions: x.get_­id() == id() and get_­id() returns the value of x.get_­id() prior to the start of construction.