Quoi? La personne a demandé spécifique à Linux, et l'équivalent de getpid(). Pas BSD ou Apple. La réponse est gettid() et renvoie un type intégral. Vous devrez l'appeler en utilisant syscall(), comme ceci :
#include <sys/types.h>
#include <unistd.h>
#include <sys/syscall.h>
....
pid_t x = syscall(__NR_gettid);
Bien que cela ne soit pas portable sur des systèmes non Linux, le threadid est directement comparable et très rapide à acquérir. Il peut être imprimé (comme pour les LOG) comme un entier normal.
Comme indiqué dans d'autres réponses, pthreads ne définit pas de méthode indépendante de la plate-forme pour récupérer un ID de thread intégral.
Sur les systèmes Linux, vous pouvez obtenir l'ID de thread ainsi :
#include <sys/types.h>
pid_t tid = gettid();
Sur de nombreuses plates-formes basées sur BSD, cette réponse https://stackoverflow.com/a/21206357/316487 donne un moyen non portable.
Cependant, si la raison pour laquelle vous pensez avoir besoin d'un ID de thread est de savoir si vous exécutez sur le même thread ou sur un autre thread que vous contrôlez, vous pourriez trouver une utilité dans cette approche
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 vous avez juste besoin de savoir si vous êtes sur le fil principal, il existe d'autres moyens, documentés dans les réponses à cette question, comment puis-je savoir si pthread_self est le fil principal (premier) du processus ?.
pid_t tid = syscall(SYS_gettid);
Linux fournit un tel appel système pour vous permettre d'obtenir l'identifiant d'un thread.
pthread_self()
La fonction donnera l'identifiant de thread du thread actuel.
pthread_t pthread_self(void);
Le pthread_self()
La fonction renvoie le handle Pthread du thread appelant. La fonction pthread_self() ne renvoie PAS le thread intégral du thread appelant. Vous devez utiliser pthread_getthreadid_np()
pour renvoyer un identifiant intégral pour le thread.
REMARQUE :
pthread_id_np_t tid;
tid = pthread_getthreadid_np();
est nettement plus rapide que ces appels, mais offre le même comportement.
pthread_id_np_t tid;
pthread_t self;
self = pthread_self();
pthread_getunique_np(&self, &tid);