Понимание нитей
Я наткнулся на концепцию вРасширенное программирование в Linux, Вотссылка: Ссылаться на4.5 Внедрение GNU / Linux Thread.I '
Я ясно с понятием, что автор говоритс, но яЯ путаюсь с программой, которую он объяснил для печати processID 'с тем.
Вот код
#include
#include
#include
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 внутренне вызываетклон(в большинстве случаев), так же, каквилка Системный вызов делает, чтобы создать процесс. Единственное отличие состоит в том, что поток, созданный в процессе, использует одно и то же адресное пространство процесса, а процесс, созданный родительским процессом, копирует адресное пространство родительского процесса. Итак, я думаю, что печать идентификатора процесса в потоках приводит к тому же идентификатору процесса. но это не тот же самый результат в книге.
Пожалуйста, скажите мне, о чем он говорит? Ответ неверен в книге / моей ..?