A thread
объект может представлять поток выполнения, но это не означает, что фактический поток выполнения запущен (даже если это было в какой-то момент времени).
Другими словами, когда вы создаете объект thread
(который представляет фактический поток выполнения, т. Е. Вы используете конструктор не по умолчанию), и связанный с ним поток выполнения заканчивается, это событие не изменить состояние объекта thread
. Это все равно будет joinable()
.
Точнее, согласно [thread.thread.class] , пост-условие конструктора, отличного от заданного по умолчанию, равно get_id() != id()
(т.е. объект представляет фактический поток выполнения). Единственный способ изменить это условие - это join()
или detach()
(или его перемещение) - тот факт, что поток выполнения завершен или нет, не меняет возвращаемое значение get_id()
. В этом примечании к стандарту разъясняются только те события, которые могут изменить условие:
[Примечание: объект потока не представляет поток выполнения после построения по умолчанию, после перемещения или после успешного вызова отсоединения или соединения. - конец примечания]