main()的pthread ID是否默认为0?

时间:2011-03-23 11:01:35

标签: pthreads

我正在仔细检查我正在维护的一些代码中的一些假设。

我是否理解程序的main()的pthread ID将始终定义为0?

所以,例如:

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

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

将始终打印0?

这似乎是它在我自己的系统上运行的方式(Linux,GNU_LIBPTHREAD_VERSION是:NPTL 2.11.1),但我没有设法在pthread库的各种解释中找到对此定义的任何引用。我想知道这种行为是否可靠和便携,或者它是否只是当地的侥幸。谢谢!

2 个答案:

答案 0 :(得分:4)

pthread_t应被视为不透明类型;有一个函数pthread_equal(),您应该使用它来比较线程pthread_t对象。转换为unsigned int绝对是未定义的行为,与使用==。

的int进行比较

答案 1 :(得分:1)

一位名叫“失业的俄罗斯人”的人编辑了我的另一个答案,其中包括以下内容;我个人不买它,但也许它有什么东西呢?

  

此外,您打印的零只是因为您实际上根本没有与libpthread链接而打印。考虑:

#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

我不买这个,因为在我的MacBook上,我得到了

$ g++ -g t.c  && ./a.out
Main ID is a092e720