GNU/Linux >> Tutoriels Linux >  >> Linux

ID de thread vs poignée de thread

L'ID est l'identifiant numérique unique du thread en cours d'exécution dans le système. Un descripteur de thread, comme tout descripteur d'objet du noyau, peut être vu comme un type spécial de pointeur compté par référence vers l'objet du noyau.

Donc dans l'espace noyau il y a un objet de type THREAD avec ID =12345

Et parce que vous voulez faire quelque chose avec le thread, vous avez un pointeur dans votre espace d'adressage appelé threadID avec la valeur 44.

Veuillez noter que différents descripteurs pour le même objet du noyau ont des valeurs différentes (deux pointeurs vers un objet) et que les objets du noyau peuvent avoir des descripteurs dans plus d'un processus.


Pour autant que je sache, la bibliothèque pthread de Linux n'a pas de concept de handle de thread. pthread_create et d'autres fonctions pthreads, renvoient un ID de thread.

Sous Windows, le descripteur de thread est différent de l'ID de thread, de la même manière qu'un descripteur de fichier est différent d'un nom de fichier.

Le handle de thread est un jeton qui vous permet de faire quelque chose avec le thread (généralement l'attendre ou le tuer). Win32 a ces jetons pour de nombreux objets et les appelle HANDLE en général.

Le jeton est essentiellement un pointeur sur le thread en cours d'exécution (ou arrêté) et possède un ensemble de capacités qui lui sont associées, par exemple, vous pouvez avoir un handle qui vous permet d'attendre, mais pas de tuer, un thread. De la même manière, nous pouvons avoir un descripteur de fichier en lecture seule.

Ce niveau d'indirection peut être utile ou non, mais c'est la façon dont Win32 le fait, et il est globalement cohérent avec la façon dont il gère certains autres types d'objets.


Les identifiants de thread sont progressifs (c'est-à-dire l'un après l'autre), que vous pouvez parcourir. Les handles de thread, comme la plupart des handles dans Windows, sont en fait des pointeurs. Vous pouvez, par exemple, définir les bits de propriété de thread en utilisant le handle de thread - mais pas l'identifiant de thread .


Linux
  1. Comment gérer les commutateurs dans un script shell ?

  2. Comment terminer un thread dans un programme C ( exemple pthread_exit )

  3. Est-ce que errno est thread-safe ?

  4. Les threads ont-ils un tas distinct ?

  5. Comment imprimer pthread_t

WaitForSingleObject et WaitForMultipleObjects équivalent sous Linux ?

Threads POSIX détachés ou joignables

Ouverture d'un thread Python dans une nouvelle fenêtre de console

Que se passe-t-il lorsqu'un thread bifurque ?

bogue de routage Linux?

Obtenir des statistiques de processeur par thread