Реализация pthread_create в Linux - PullRequest
       20

Реализация pthread_create в Linux

0 голосов
/ 01 сентября 2009

В одном ресурсе Linux упоминается, что pthread-create реализуется с помощью системного вызова clone по сравнению с другими платформами на основе Unix (которые реализуют то же самое в некоторых других отношениях).
Это означает, что в Linux два потока, созданные из одного и того же процесса с использованием pthread_create, будут иметь разные идентификаторы родительского процесса.

$ ./a.out
new thread:  pid 6628 tid 1026 (0x402)
main thread: pid 6626 tid 1024 (0x400)  

Вопрос

  • Хотя системный вызов clone создает дочерний процесс, который может совместно использовать настраиваемое количество контекста выполнения его родителя (такого как дескрипторы файлов и память), мне кажется, что среди всех реализаций это, возможно, не самый эффективный. Под Linux для каждого потока, созданного из pthread_create, существует соответствующий процесс (хотя он будет совместно использовать ресурсы с другими процессами)? Правильно ли это истолковано?

1 Ответ

6 голосов
/ 01 сентября 2009

Похоже, вы используете устаревшую LinuxThreads реализацию pthreads, которая возвращала разные pid для каждого потока. Текущая реализация - NPTL (Native POSIX Threads Library), которая этого не делает. Он по-прежнему реализован с использованием clone(), хотя clone() был улучшен, чтобы на его основе можно было построить высокоэффективную POSIX-совместимую реализацию потоков, и NPTL широко использует эти улучшения.

Вы можете определить, какую реализацию вы используете, с помощью команды getconf GNU_LIBPTHREAD_VERSION. Подробности см. В pthreads (7) .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...