Tengo una consulta relacionada con la implementación de hilos en Linux.Si los hilos comparten el mismo PID, ¿cómo se pueden identificar?
Linux no tiene un soporte explícito de subprocesos. En el espacio de usuario, podríamos usar una biblioteca de hilos (como NPTL) para crear hilos. Ahora si usamos NPTL, admite mapeo 1: 1.
El kernel utilizará la función clone()
para implementar subprocesos.
Supongamos que he creado 4 hilos. Entonces significaría que:
- Habrá 4
task_struct
. - Dentro del
task_struct
, habrá provisión de recursos compartidos según los argumentos para clonar(CLONE_VM | CLONE_FS | CLONE_FILES | CLONE_SIGHAND)
.
ahora tengo la siguiente consulta:
- ¿Los 4 hilos tienen el mismo PID? Si alguien puede dar más detalles, cómo se comparten los PID.
- ¿Cómo se identifican los diferentes hilos? ¿Hay algún concepto TID (ID de hilo)?
FYI, 'getpid()' devuelve tgid: 'asmlinkage long sys_getpid (void) {return current-> tgid;}', como se muestra en [www.makelinux.com/](http://www.makelinux. com/books/lkd2/ch05lev1sec2) – Duke
@Duke - wow, así que es por eso que no pude encontrar una función 'gettgid (2)'. Y el 'getpid()' no devolverá el TID ("PID" del hilo), y ahí es donde 'gettid (2)' entra. De esta manera puedo decir si estamos en el hilo principal o no. –
Esto nos lleva a otro punto interesante: si los hilos y procesos se manejan por igual dentro del kernel (aparte de la tgid), un proceso de subprocesos múltiples obtendrá más tiempo de CPU que uno de un solo subproceso, siempre que ambos tengan el misma prioridad y ninguno de los hilos se detiene por ningún motivo (como esperar un mutex). – Aconcagua