33 Thread support library [thread]

33.3 Threads [thread.threads]

33.3.2 Class thread [thread.thread.class]

33.3.2.2 thread constructors [thread.thread.constr]

thread() noexcept;

Effects: Создает thread объект, не представляющий поток выполнения.

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

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

Requires:  F и каждый Ti в Args должны удовлетворять MoveConstructible требованиям. INVOKE(​DECAY_­COPY(​std​::​forward<F>(f)), DECAY_­COPY(​std​::​forward<Args>(​args))...) ([func.require]) должно быть допустимым выражением.

Remarks: Этот конструктор не должен участвовать в разрешении перегрузки, если decay_­t<F> он того же типа, что и std​::​thread.

Effects:  Создает объект типа thread. Новый поток выполнения выполняется INVOKE(​DECAY_­COPY(​std​::​forward<F>(f)), DECAY_­COPY(​std​::​forward<Args>(​args))...) с вызовами, DECAY_­COPY которые оцениваются в потоке построения. Любое возвращаемое значение из этого вызова игнорируется. [ Note: Это означает, что любые исключения, не возникшие при вызове копии, f будут выброшены в потоке построения, а не в новом потоке. ] Если вызов завершается неперехваченным исключением, должен вызываться. end noteINVOKE(​DECAY_­COPY(​std​::​forward<F>(f)), DECAY_­COPY(​std​::​forward<Args>(args))...) terminate

Synchronization: Завершение вызова конструктора синхронизируется с началом вызова копии f.

Postconditions: get_­id() != id(). *this представляет только что запущенный поток.

Throws: system_­error если не удается начать новый поток.

Error conditions:

  • resource_­unavailable_­try_­again - системе не хватало ресурсов, необходимых для создания другого потока, или установленный системой лимит на количество потоков в процессе был бы превышен.

thread(thread&& x) noexcept;

Effects: Создает объект типа thread из xи устанавливает x в сконструированное состояние по умолчанию.

Postconditions: x.get_­id() == id() и get_­id() возвращает значение x.get_­id() до начала строительства.