Che cosa? La persona ha chiesto specifiche per Linux e l'equivalente di getpid(). Non BSD o Apple. La risposta è gettid() e restituisce un tipo integrale. Dovrai chiamarlo usando syscall(), in questo modo:
#include <sys/types.h>
#include <unistd.h>
#include <sys/syscall.h>
....
pid_t x = syscall(__NR_gettid);
Anche se questo potrebbe non essere portabile su sistemi non Linux, il threadid è direttamente confrontabile e molto veloce da acquisire. Può essere stampato (come per i LOG) come un normale numero intero.
Come notato in altre risposte, pthreads non definisce un modo indipendente dalla piattaforma per recuperare un ID thread integrale.
Sui sistemi Linux, puoi ottenere l'ID del thread così:
#include <sys/types.h>
pid_t tid = gettid();
Su molte piattaforme basate su BSD, questa risposta https://stackoverflow.com/a/21206357/316487 offre un modo non portatile.
Tuttavia, se il motivo per cui ritieni di aver bisogno di un ID thread è sapere se stai eseguendo sullo stesso thread o su un altro thread che controlli, potresti trovare qualche utilità in questo approccio
static pthread_t threadA;
// On thread A...
threadA = pthread_self();
// On thread B...
pthread_t threadB = pthread_self();
if (pthread_equal(threadA, threadB)) printf("Thread B is same as thread A.\n");
else printf("Thread B is NOT same as thread A.\n");
Se hai solo bisogno di sapere se sei nel thread principale, ci sono altri modi, documentati nelle risposte a questa domanda, come posso sapere se pthread_self è il (primo) thread principale nel processo?.
pid_t tid = syscall(SYS_gettid);
Linux fornisce tale chiamata di sistema per permetterti di ottenere l'id di un thread.
pthread_self()
la funzione fornirà l'id del thread corrente.
pthread_t pthread_self(void);
Il pthread_self()
La funzione restituisce l'handle Pthread del thread chiamante. La funzione pthread_self() NON restituisce il thread integrale del thread chiamante. Devi usare pthread_getthreadid_np()
per restituire un identificatore integrale per il thread.
NOTA:
pthread_id_np_t tid;
tid = pthread_getthreadid_np();
è significativamente più veloce di queste chiamate, ma fornisce lo stesso comportamento.
pthread_id_np_t tid;
pthread_t self;
self = pthread_self();
pthread_getunique_np(&self, &tid);