J'ai un pthread_t, et je voudrais changer son affinité CPU. Le problème est que j'utilise la glibc 2.3.2, qui n'a pas pthread_setaffinity_np(). Cela est correct, car pthread_setaffinity_np() est lui-même un wrapper de sched_setaffinity(), qui peut être appelé en passant un ID de thread au lieu d'un ID de processus pour définir l'affinité pour un thread arbitraire.Comment puis-je obtenir un ID de thread à partir d'un pthread_t arbitraire?
BUT ... L'ID de thread avec lequel sched_setaffinity peut fonctionner est un ID de thread OS, le type que vous pouvez obtenir à partir de l'appel système gettid(). Ceci est différent du type opaque pthread_t, et gettid() ne retournera que l'identificateur de thread du thread en cours . J'ai besoin de pouvoir définir l'affinité CPU d'un thread arbitraire.
Malheureusement, je ne peux pas accéder aux parties privées de pthread, ce qui me permettrait de voler l'identifiant de thread en lançant un pthread_t à struct pthread *
. Tant mieux, je suppose, puisque s'appuyer sur des implémentations privées demande même plus de problèmes. J'ai également lu sur la fonction pthread_getunique_np, mais cela renvoie un "identifiant unique unique" - qui, je ne crois pas est en aucune façon forme ou forme équivalente à un ID de thread OS.
Par conséquent, la question: Comment puis-je obtenir un ID de thread à partir d'un pthread_t arbitraire?
Il n'y a pas besoin de mmap, les threads partagent quand même la même mémoire. – raimue
Bon point :) ça alors c'est si évident ...;) –