我正在仔细检查我正在维护的一些代码中的一些假设。
我是否理解程序的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库的各种解释中找到对此定义的任何引用。我想知道这种行为是否可靠和便携,或者它是否只是当地的侥幸。谢谢!
答案 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