android c multithreading android-ndk multicore

Android establece afinidad con el hilo



multithreading android-ndk (3)

Siguiendo la respuesta de esta pregunta de StackOverflow, ¿ cómo creo el entero adecuado para la máscara?

Hice algunos googlear y todo lo que encontré utiliza la macro CPU_SET de sched.h pero opera en estructuras cpu_set_t que no están definidas cuando se usa NDK. Cuando intento usar CPU_SET enlazador me da un error de referencia indefinido (aunque enlace contra pthread).


Bueno, al final encontré una versión que fue tomada directamente de sched.h . Estoy publicando esto aquí si alguien tiene el mismo problema y no quiere perder el tiempo buscándolo. Esto es bastante útil.

#define CPU_SETSIZE 1024 #define __NCPUBITS (8 * sizeof (unsigned long)) typedef struct { unsigned long __bits[CPU_SETSIZE / __NCPUBITS]; } cpu_set_t; #define CPU_SET(cpu, cpusetp) / ((cpusetp)->__bits[(cpu)/__NCPUBITS] |= (1UL << ((cpu) % __NCPUBITS))) #define CPU_ZERO(cpusetp) / memset((cpusetp), 0, sizeof(cpu_set_t))

Esto funciona bien cuando el tipo de parámetro en el setCurrentThreadAffinityMask original (de la publicación mencionada en la pregunta) simplemente se reemplaza por cpu_set_t .


Me gustaría prestarle atención que la función del enlace en la primera publicación no establece la afinidad de la CPU de la secuencia. Conviene establecer la afinidad de la CPU del proceso. Por supuesto, si tiene un hilo en su aplicación, funciona bien, pero está mal para varios hilos. Comprueba la descripción de sched_setaffinity (), por ejemplo, en http://linux.die.net/man/2/sched_setaffinity


Intenta agregar esto antes de incluir <sched.h>

#define _GNU_SOURCE