Идентификатор pthread у main () по умолчанию равен 0? - PullRequest
0 голосов
/ 23 марта 2011

Я дважды проверяю некоторые предположения, сделанные в некотором коде, который я поддерживаю.

Правильно ли я понимаю, что pthread-идентификатор main () программы всегда будет определяться как 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 ]

4 голосов
/ 23 марта 2011

pthread_t следует рассматривать как непрозрачный тип; есть функция pthread_equal (), которую вы должны использовать для сравнения потоковых объектов pthread_t. Приведение к unsigned int - это определенно неопределенное поведение, по сравнению с int с ==.

1 голос
/ 04 апреля 2011

Парень по имени «Безработный русский» отредактировал мой другой ответ, включив в него следующее; Я лично не покупаю это, но возможно есть что-то к этому?

Кроме того, полученный вами ноль был напечатан только потому, что вы вообще не связывались с 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...