ID потока и дескриптор потока - PullRequest
13 голосов
/ 24 февраля 2011

Смущающий вопрос: в чем разница между идентификатором потока и дескриптором потока? Зачем нужны оба? Есть ли разница между Windows и Linux?

Ответы [ 3 ]

16 голосов
/ 24 февраля 2011

В библиотеке Linux pthread, насколько я знаю, нет понятия дескриптора потока.pthread_create и другие функции pthreads возвращают идентификатор потока.

В Windows дескриптор потока отличается от идентификатора потока, так же, как дескриптор файла отличается от имени файла.

Дескриптор потока - это токен, который позволяет вам что-то делать с потоком (обычно его ждут или убивают).Win32 имеет эти токены для большого количества объектов и в общем случае называет их HANDLE.

Токен, по сути, является указателем на работающий (или остановленный) поток и имеет набор способностей, связанных с ним, например, выможет иметь дескриптор, который позволяет вам ждать, но не уничтожать поток.Таким же образом, у нас может быть дескриптор файла, который доступен только для чтения.

Этот уровень косвенности может быть полезен или не полезен, но именно так Win32 делает это, и он в целом соответствует тому, как он обрабатываетнекоторые другие типы объектов.

5 голосов
/ 24 февраля 2011

Идентификатор - это уникальный числовой идентификатор потока, работающего в системе.Дескриптор потока, как и любой дескриптор объекта ядра, может рассматриваться как особый тип подсчитанного ссылочного указателя на объект ядра.

ТАК, что в пространстве ядра есть объект типа THREAD с ID = 12345

И поскольку вы хотите что-то сделать с потоком, в вашем адресном пространстве есть указатель, называемый threadID со значением 44.

Обратите внимание, что разные дескрипторы одного и того же объекта ядра имеют разные значения (два указателяк одному объекту) и что объекты ядра могут иметь дескрипторы в более чем одном процессе.

3 голосов
/ 24 февраля 2011

Идентификаторы потоков являются прогрессивными (т. Е. Один за другим), которые вы можете перемещать. Дескрипторы потоков, как и большинство дескрипторов в Windows, на самом деле являются указателями. Например, вы можете установить биты свойств потока, используя дескриптор потока, но не идентификатор потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...