2011-02-24 23 views
10

Una pregunta embarazosa: ¿cuál es la diferencia entre una identificación de hilo y una manecilla de hilo? ¿Por qué ambos son necesarios? ¿Hay alguna diferencia entre Windows y Linux?Thread ID vs. Thread Handle

Respuesta

14

La biblioteca pthread de Linux no tiene, hasta donde sé, un concepto de manejador de subprocesos. pthread_create y otras funciones pthreads, devuelve una ID de hilo.

En Windows, el identificador de subproceso es diferente del ID de subproceso, de la misma forma que un identificador de archivo es diferente de un nombre de archivo.

El controlador de hilo es un token que le permite hacer algo con el hilo (generalmente espere o elimínelo). Win32 tiene estos tokens para muchos objetos, y los llama HANDLE en general.

El token es esencialmente un puntero en el hilo en ejecución (o detenido) y tiene un conjunto de habilidades asociadas, por ejemplo, puede tener un identificador que le permite esperar, pero no matar, un hilo. De la misma manera, podemos tener un identificador de archivo que sea de solo lectura.

Este nivel de direccionamiento indirecto puede o no ser útil, pero es la forma en que Win32 lo hace, y es muy consistente con la forma en que maneja algunos otros tipos de objetos.

2

Las ID de subprocesos son progresivas (es decir, una tras otra), que puede recorrer. Los identificadores de subprocesos, como la mayoría de los identificadores en Windows, son en realidad punteros. Puede, por ejemplo, establecer bits de propiedades de subprocesos utilizando el manejador de subprocesos, pero no el id. De subproceso.

4

El ID es el identificador numérico exclusivo del subproceso que se ejecuta en el sistema. Un manejador de subproceso, como cualquier manejador de objeto de kernel, se puede ver como un tipo especial de puntero contado de referencia para el objeto kernel.

por lo que en el espacio del núcleo no es un objeto de tipo de rosca con ID = 12345

Y porque quiere hacer algo con el hilo que tiene un puntero en su espacio de direcciones llamado ThreadID con el valor 44.

Tenga en cuenta que los diferentes controles para el mismo objeto kernel tienen diferentes valores (dos apuntadores a un objeto) y que los objetos kernel pueden tener identificadores en más de un proceso.