Pthreads main()和#x27;s pthread ID默认为0?

Pthreads main()和#x27;s pthread ID默认为0?,pthreads,Pthreads,我在反复检查我维护的代码中的一些假设 我对程序main()的pthread ID始终定义为0的理解正确吗 例如: #include <pthread.h> #include <cstdio> int main(){ printf("Main ID is %X\n", (unsigned int)pthread_self()); } #包括 #包括 int main(){ printf(“主ID为%X\n”,(unsigned int)pthread_self(

我在反复检查我维护的代码中的一些假设

我对程序main()的pthread ID始终定义为0的理解正确吗

例如:

#include <pthread.h>
#include <cstdio>

int main(){
    printf("Main ID is %X\n", (unsigned int)pthread_self());
}
#包括
#包括
int main(){
printf(“主ID为%X\n”,(unsigned int)pthread_self());
}
是否将始终打印0


这似乎就是它在我自己的系统上的工作方式(Linux,GNU_LIBPTHREAD_版本为:NPTL 2.11.1),但我还没有在pthread库的各种解释中找到对该定义的任何引用。我想知道这种行为是可靠的和可移植的,还是仅仅是本地的侥幸。谢谢

pthread\u t应被视为不透明类型;应该使用函数pthread_equal()来比较线程pthread_t对象。强制转换为无符号int肯定是未定义的行为,这与使用==的int进行比较一样。

pthread\u t应被视为不透明类型;应该使用函数pthread_equal()来比较线程pthread_t对象。强制转换为未签名的int肯定是未定义的行为,就像将int与==进行比较一样。

一个名叫“失业俄罗斯人”的家伙编辑了我的另一个答案,包括以下内容:;我个人不相信,但也许有什么原因

此外,您得到的零只是因为您实际上根本没有链接到libpthread才被打印出来的。考虑:

一个叫“失业的俄罗斯人”的家伙编辑了我的另一个答案,包括以下内容:;我个人不相信,但也许有什么原因

此外,您得到的零只是因为您实际上根本没有链接到libpthread才被打印出来的。考虑:


这是特定于实现的。当然有一些(IMO破坏性的)实现,其中真正的
pthread\u self
libpthread
中,而存根pthread函数存在于主libc中,因此如果发生这种情况,我一点也不感到惊讶。另一方面,它绝对不是你可以依赖的东西。这是特定于实现的。当然有一些(IMO破坏性的)实现,其中真正的
pthread\u self
libpthread
中,而存根pthread函数存在于主libc中,因此如果发生这种情况,我一点也不感到惊讶。另一方面,它绝对不是你可以依赖的东西。
#include <pthread.h>
#include <cstdio>

int main(){
    printf("Main ID is %lx\n", (unsigned long)pthread_self());
}

$ g++ -g t.c  && ./a.out
Main ID is 0
$ g++ -g t.c -pthread && ./a.out
Main ID is 7fd1a288d720
$ g++ -g t.c  && ./a.out
Main ID is a092e720