Понимание нитей
Я наткнулся на концепцию вРасширенное программирование в Linux, Вотссылка: Ссылаться на4.5. Реализация потоков в GNU / Linux.
Я полностью понимаю концепцию того, что говорит автор, но меня смущает программа, которую он объяснил для печати идентификаторов процессов для потоков.
Вот код
#include <pthread.h>
#include <stdio.h>
#include <unistd.h>
void* thread_function (void* arg)
{
fprintf (stderr, "child thread pid is %d\n", (int) getpid ());
/* Spin forever. */
while (1);
return NULL;
}
int main ()
{
pthread_t thread;
fprintf (stderr, "main thread pid is %d\n", (int) getpid ());
pthread_create (&thread, NULL, &thread_function, NULL);
/* Spin forever. */
while (1);
return 0;
}
Выход для вышеуказанного кода в соответствии с автором
% cc thread-pid.c -o thread-pid -lpthread
% ./thread-pid &
[1] 14608
main thread pid is 14608
child thread pid is 14610
Вывод, который я получаю при компиляции
[1] 3106
main thread pid is 3106
child thread pid is 3106
Я понимаю, что для создания потока, Linux внутренне вызываетклон(в большинстве случаев), так же, каквилка Системный вызов делает, чтобы создать процесс. Единственное отличие состоит в том, что поток, созданный в процессе, использует одно и то же адресное пространство процесса, а процесс, созданный родительским процессом, копирует адресное пространство родительского процесса. Итак, я думаю, что печать идентификатора процесса в потоках приводит к тому же процессу. но это не тот же самый результат в книге.
Пожалуйста, скажите мне, о чем он говорит? Ответ неверен в книге / моей ..?