Ho un pthread_t, e mi piacerebbe cambiare l'affinità della CPU. Il problema è che sto usando glibc 2.3.2, che non ha pthread_setaffinity_np(). Va bene, però, perché pthread_setaffinity_np() è esso stesso un wrapper di sched_setaffinity(), che può essere chiamato passando un ID di thread invece di un ID di processo per impostare l'affinità per un thread arbitrario.Come ottengo un ID filo da un pthread_t arbitrario?
MA ... L'id filo che sched_setaffinity può lavorare con è un id filo sistema operativo, il tipo che si può ottenere dalla chiamata di sistema gettid(). Questo è diverso dal tipo opaco pthread_t e gettid() restituirà solo il threadid del thread corrente . Devo essere in grado di impostare l'affinità della CPU di un thread arbitrario.
Sfortunatamente, non riesco ad accedere alle parti private del pthread, il che mi consente di rubare l'id del thread lanciando un pthread_t a struct pthread *
. Tanto meglio, immagino, dal momento che fare affidamento su implementazioni private richiede anche problemi in più.
Ho letto anche la funzione pthread_getunique_np, tuttavia questo restituisce un "identificatore integrale univoco" - che non credo sia in alcun modo forma o forma equivalente a un ID del thread del sistema operativo.
Quindi, la domanda: come posso ottenere un ID filo da un pthread_t arbitrario?
Non c'è bisogno di mmap, i thread condividono comunque la stessa memoria. – raimue
Buon punto :) cavolo che è così ovvio ...;) –