Ich habe eine pthread_t, und ich möchte seine CPU-Affinität ändern. Das Problem ist, dass ich glibc 2.3.2 verwende, das pthread_setaffinity_np() nicht hat. Das ist jedoch in Ordnung, denn pthread_setaffinity_np() ist selbst ein Wrapper von sched_setaffinity(), der durch Übergeben einer Thread-ID anstelle einer Prozess-ID aufgerufen werden kann, um die Affinität für einen beliebigen Thread festzulegen.Wie bekomme ich eine Thread-ID von einem beliebigen pthread_t?
ABER ... Die Thread-ID, mit der sched_setaffinity arbeiten kann, ist eine Betriebssystem-Thread-ID, die Sie vom Systemruf gettid() erhalten können. Dies unterscheidet sich vom opaken Typ pthread_t, und gettid() gibt nur die Thread-ID des aktuellen Threads zurück. Ich muss in der Lage sein, die CPU-Affinität eines beliebigen Threads festzulegen.
Leider kann ich nicht auf die privaten Teile des pthread zugreifen, was mir erlauben würde, die Thread-ID zu stehlen, indem ich ein pthread_t in ein struct pthread *
umwandelt. Umso besser, schätze ich, da man sich auf private Implementierungen verlassen muss, um nach weiteren Problemen zu fragen: mehr.
Ich habe auch auf der pthread_getunique_np Funktion gelesen, aber dies gibt eine "eindeutige Integral-Kennung" - die ich glaube nicht, ist in irgendeiner Form oder Form entspricht einer OS-Thread-ID.
Daher die Frage: Wie bekomme ich eine Thread-ID aus einem beliebigen pthread_t?
Es ist keine mmap erforderlich, Threads teilen sich trotzdem den gleichen Speicher. – raimue
Guter Punkt :) gosh das ist so offensichtlich ...;) –