Come posso ottenere un ID thread da un pthread_t arbitrario?

Ho un pthread_t, e mi piacerebbe cambiare la sua affinità 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.

MA … L’id del thread con cui sched_setaffinity può funzionare è un id del thread del sistema operativo, il tipo che è ansible ottenere dalla chiamata di sistema gettid () . Questo è diverso dal tipo opaco pthread_t , e gettid () restituirà solo il thread-id del thread corrente . Devo essere in grado di impostare l’affinità della CPU di un thread arbitrario.

Sfortunatamente, non posso accedere alle parti private del pthread, il che mi permetterebbe di rubare l’id del thread lanciando un pthread_t a una struct pthread * . Tanto meglio, immagino, dal momento che fare affidamento su implementazioni private richiede ancora più problemi.

Ho anche letto 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 thread da un pthread_t arbitrario?