Если у меня есть поток Win32, я ссылаюсь на него через дескриптор и также могу получить его идентификатор потока.
дескриптор остается действительным и может использоваться пока я не закрою дескриптор, даже если поток был завершен. (В противном случае нельзя было бы использовать, например, GetExitCodeThread
Однако кажется, что в документах не всегда упоминается, что «происходит» с идентификатором потока после завершения потока, но до тех пор, пока кто-то все еще удерживает дескриптор потока для завершенного потока.
В дескрипторы и идентификаторы потоков указано, что
Идентификаторы действительны с момента создания потока до его завершения.
Когда мы затем посмотрим на GetThreadId API, мы можем задаться вопросом, что он должен был бы вернуть для завершенного потока, если бы идентификатор был действителен только до завершения потока. (А также на этом сайте есть пользовательский комментарий: «Неверно. Пока есть открытый дескриптор потока, его идентификатор потока по-прежнему действителен и уникален». Что действительно отвечает на этот здесь вопрос утвердительно, но не более того. контекст я осторожен.)
Кроме того, я нашел этот фрагмент в ответе здесь на SO:
ID — это уникальный числовой идентификатор потока, работающего в системе. Дескриптор потока, как и любой дескриптор объекта ядра, можно рассматривать как особый тип указателя с подсчетом ссылок на объект ядра.
Если это правильно и идентификатор потока действительно является идентификатором объекта ядра, то, по-видимому, потребуется, чтобы этот идентификатор оставался действительным, пока открыты какие-либо дескрипторы (поскольку объект ядра должен оставаться там для запроса).
Здравы ли мои рассуждения? Действителен ли идентификатор потока, пока открыты какие-либо дескрипторы? Существуют ли какие-либо документы MS или авторитетная книга, в которых явно указано одно или другое?