linux - example - pthread_exit
¿Cuál es la diferencia entre pthread_self() y gettid()? ¿Cuál debo usar? (2)
Creo que el hecho de que gettid()
exista solo como una llamada al sistema y no haya sido expuesto directamente como una llamada a la API podría significar "usarlo solo si estás absolutamente seguro de lo que estás haciendo" y gettid()
no es destinado a ser portátil.
Usted debe ser mejor si se adhiere a pthread
. Puede cambiar la política / prioridad de programación más tarde con pthread_setschedparam()
Estoy tratando de establecer la afinidad de la CPU de los hilos en Linux. Me gustaría saber cuál de los siguientes enfoques se recomienda:
Obtener ID de hilo usando pthread_self ()
Establezca la afinidad de la CPU utilizando pthread_setaffinity_np (....) pasando el ID de hilo como un argumento
Obtener ID de hilo usando la llamada gettid ()
Establezca la afinidad de la CPU utilizando sched_setaffinity (....) pasando el ID de hilo en el lugar del ID de proceso
PS: Después de configurar la afinidad de la CPU, tengo la intención de aumentar la prioridad de programación del subproceso.
No son lo mismo . Aquí hay algunos bits que TLPI de TLPI (no pude encontrar un bloque lo suficientemente grande que describa esto por completo). Si tienes prisa, probablemente solo quieras la última parte.
gettid
Linux 2.4 introdujo una nueva llamada al sistema, gettid()
, para permitir que un hilo obtenga su propio ID de hilo.
Cada hilo dentro de un grupo de hilos se distingue por un único identificador de hilo. Un ID de hilo se representa utilizando el mismo tipo de datos que se utiliza para un ID de proceso, pid_t
. Los ID de subprocesos son exclusivos del sistema, y el núcleo garantiza que ningún ID de subproceso será el mismo que cualquier ID de proceso en el sistema, excepto cuando un subproceso es el líder del grupo de subprocesos para un proceso.
pthread_self
Cada subproceso dentro de un proceso se identifica de forma única por un ID de subproceso. Un hilo puede obtener su propia ID utilizando pthread_self()
.
La función pthread_equal()
es necesaria para comparar los ID de subprocesos porque el tipo de datos pthread_t
debe tratarse como datos opacos .
En las implementaciones de subprocesos de Linux, las ID de subprocesos son únicas en todos los procesos. Sin embargo, este no es necesariamente el caso en otras implementaciones, y SUSv3 observa explícitamente que una aplicación no puede usar de manera portátil un ID de hilo para identificar un hilo en otro proceso .
gettid
vs pthread_self
Los ID de subprocesos de POSIX no son los mismos que los ID de subprocesos devueltos por la llamada al sistema gettid()
específica de Linux. ID de subprocesos POSIX son asignados y mantenidos por la implementación de subprocesos. El ID de hilo devuelto por gettid()
es un número (similar a un ID de proceso) que es asignado por el kernel.
Iría con pthread_setaffinity_np
pero tenga en cuenta que el manual dice:
Estas funciones se implementan en la parte superior de la sched_setaffinity (2)