¿Qué? La persona preguntó por Linux específico y el equivalente de getpid(). Ni BSD ni Apple. La respuesta es gettid() y devuelve un tipo integral. Tendrás que llamarlo usando syscall(), así:
#include <sys/types.h>
#include <unistd.h>
#include <sys/syscall.h>
....
pid_t x = syscall(__NR_gettid);
Si bien esto puede no ser portátil para sistemas que no sean Linux, el threadid es directamente comparable y muy rápido de adquirir. Se puede imprimir (como para LOG) como un número entero normal.
Como se señaló en otras respuestas, pthreads no define una forma independiente de la plataforma para recuperar una ID de hilo integral.
En los sistemas Linux, puede obtener la ID del subproceso de la siguiente manera:
#include <sys/types.h>
pid_t tid = gettid();
En muchas plataformas basadas en BSD, esta respuesta https://stackoverflow.com/a/21206357/316487 brinda una forma no portátil.
Sin embargo, si la razón por la que cree que necesita una ID de subproceso es saber si está ejecutando en el mismo subproceso o en uno diferente a otro subproceso que controla, puede encontrar alguna utilidad en este enfoque
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");
Si solo necesita saber si está en el hilo principal, hay formas adicionales, documentadas en las respuestas a esta pregunta, ¿cómo puedo saber si pthread_self es el (primer) hilo principal en el proceso?
pid_t tid = syscall(SYS_gettid);
Linux proporciona dicha llamada al sistema para permitirle obtener la identificación de un hilo.
pthread_self()
La función dará la identificación del hilo del hilo actual.
pthread_t pthread_self(void);
El pthread_self()
La función devuelve el identificador Pthread del hilo de llamada. La función pthread_self() NO devuelve el hilo integral del hilo que llama. Debes usar pthread_getthreadid_np()
para devolver un identificador integral para el subproceso.
NOTA:
pthread_id_np_t tid;
tid = pthread_getthreadid_np();
es significativamente más rápido que estas llamadas, pero proporciona el mismo comportamiento.
pthread_id_np_t tid;
pthread_t self;
self = pthread_self();
pthread_getunique_np(&self, &tid);