pthread_self не возвращает числовой тип, но непрозрачный тип pthread_t
(который может быть непрозрачным struct
).
Я предлагаю вам очистить ваш массив с помощью
memset(id, 0, sizeof(id));
Действительно, в GNU / Linux / Debian / Sid / x86-64 внутренний включаемый файл /usr/include/x86_64-linux-gnu/bits/pthreadtypes.h
содержит
typedef unsigned long int pthread_t;
Но я не думаю, что вы должны верить, что это идентификация потоков, просто непрозрачный дескриптор (как дескрипторы файлов).
Я предлагаю вам прочитать хороший учебник по темам, например, например. этот Блейз Барни
На современных многоядерных машинах потоки [могут] действительно работать параллельно на разных ядрах.