Die ID ist die eindeutige numerische Kennung des im System laufenden Threads. Ein Thread-Handle kann, wie jedes Kernel-Objekthandle, als ein spezieller Typ eines referenzgezählten Zeigers auf das Kernel-Objekt angesehen werden.
Im Kernelspace gibt es also ein Objekt vom Typ THREAD mit der ID =12345
Und weil Sie etwas mit dem Thread machen wollen, haben Sie in Ihrem Adressraum einen Zeiger namens threadID mit dem Wert 44.
Bitte beachten Sie, dass verschiedene Handles auf dasselbe Kernel-Objekt unterschiedliche Werte haben (zwei Zeiger auf ein Objekt) und dass Kernel-Objekte Handles in mehr als einem Prozess haben können.
Die pthread-Bibliothek von Linux hat, soweit ich weiß, kein Konzept für ein Thread-Handle. pthread_create und andere pthreads-Funktionen geben eine Thread-ID zurück.
Unter Windows unterscheidet sich das Thread-Handle von der Thread-ID, genauso wie sich ein Datei-Handle von einem Dateinamen unterscheidet.
Das Thread-Handle ist ein Token, mit dem Sie etwas mit dem Thread tun können (normalerweise darauf warten oder ihn beenden). Win32 hat diese Tokens für viele Objekte und nennt sie allgemein HANDLE.
Das Token ist im Wesentlichen ein Zeiger auf den laufenden (oder angehaltenen) Thread und hat eine Reihe von Fähigkeiten, die ihm zugeordnet sind, zum Beispiel können Sie ein Handle haben, das es Ihnen erlaubt, auf einen Thread zu warten, ihn aber nicht zu beenden. Auf die gleiche Weise können wir ein Datei-Handle haben, das nur lesbar ist.
Diese Indirektionsebene kann nützlich sein oder auch nicht, aber es ist die Art und Weise, wie Win32 es tut, und es ist im Großen und Ganzen konsistent mit der Art und Weise, wie es einige andere Arten von Objekten behandelt.
Thread-IDs sind progressiv (dh eine nach der anderen), die Sie durchlaufen können. Thread-Handles sind, wie die meisten Handles in Windows, tatsächlich Zeiger. Sie können beispielsweise Thread-Eigenschaftsbits mit dem Thread-Handle setzen - aber nicht mit der Thread-ID .