Mam pthread_t i chciałbym zmienić jego powinowactwo do procesora. Problem polega na tym, że używam glibc 2.3.2, który nie ma pthread_setaffinity_np(). Jest to jednak w porządku, ponieważ pthread_setaffinity_np() samo jest opakowaniem sched_setaffinity(), które można wywołać, przekazując identyfikator wątku zamiast identyfikatora procesu, aby ustawić powinowactwo dla dowolnego wątku.Jak uzyskać identyfikator wątku z dowolnego pthread_t?
ALE ... Identyfikator wątku, z którym może współpracować sched_setaffinity, jest identyfikatorem wątku systemu operacyjnego, który można pobrać z wywołania systemowego gettid(). To różni się od nieprzezroczystego typu pthread_t, a gettid() zwróci tylko identyfikator wątku bieżącego wątku . Muszę umieć ustawić powinowactwo procesora do dowolnego wątku.
Niestety, nie mogę uzyskać dostępu do prywatnych części pthread, które pozwoliłyby ukraść identyfikator wątku, przesyłając pthread_t do struct pthread *
. Wydaje mi się, że tym lepiej, ponieważ poleganie na prywatnych implementacjach wymaga nawet problemów z więcej.
Czytałem również na temat funkcji pthread_getunique_np, jednak zwraca to "unikalny integralny identyfikator" - które nie sądzę, jest w jakimkolwiek kształcie lub formie równoważnej identyfikator wątku systemu operacyjnego.
W związku z tym pytanie: Jak mogę uzyskać identyfikator wątku z dowolnego pthread_t?
Nie ma potrzeby mmap, wątki i tak dzielą tę samą pamięć. – raimue
Dobry punkt :) gosh, który jest tak oczywisty ...;) –