L'ID è l'identificatore numerico univoco del thread in esecuzione nel sistema. Un handle di thread, come qualsiasi handle di oggetto del kernel, può essere visto come un tipo speciale di puntatore contato di riferimenti all'oggetto del kernel.
Quindi nello spazio del kernel c'è un oggetto di tipo THREAD con ID =12345
E poiché vuoi fare qualcosa con il thread, hai un puntatore nel tuo spazio degli indirizzi chiamato threadID con valore 44.
Tieni presente che diversi handle allo stesso oggetto kernel hanno valori diversi (due puntatori a un oggetto) e che gli oggetti kernel possono avere handle in più di un processo.
La libreria pthread di Linux, per quanto ne so, non ha un concetto di handle di thread. pthread_create e altre funzioni pthreads, restituiscono un ID thread.
Sotto Windows, l'handle del thread è diverso dall'ID del thread, nello stesso modo in cui un handle di file è diverso da un nome di file.
L'handle del thread è un token che ti consente di fare qualcosa con il thread (in genere aspettalo o uccidilo). Win32 ha questi token per molti oggetti e li chiama HANDLE in generale.
Il token è essenzialmente un puntatore al thread in esecuzione (o interrotto) e ha una serie di abilità ad esso associate, ad esempio, puoi avere un handle che ti consente di attendere, ma non uccidere, un thread. Allo stesso modo, possiamo avere un file handle di sola lettura.
Questo livello di riferimento indiretto può essere utile o meno, ma è il modo in cui lo fa Win32 ed è ampiamente coerente con il modo in cui gestisce altri tipi di oggetti.
Gli ID thread sono progressivi (ovvero, uno dopo l'altro), che puoi attraversare. Gli handle di thread, come la maggior parte degli handle in Windows, sono in realtà puntatori. Potresti, ad esempio, impostare bit di proprietà del thread utilizzando l'handle del thread, ma non l'id del thread .