Как реализованы потоки POSIX в Linux? - PullRequest
8 голосов
/ 07 мая 2011

Мне было интересно, являются ли потоки, созданные с помощью библиотеки pthreads, на самом деле потоками уровня ядра или потоками пользовательского пространства, которые не имеют ничего общего с ядром? Я слышал взаимоисключающие мнения об этом, поэтому я хочу знать правду.

Ответы [ 2 ]

5 голосов
/ 07 мая 2011

Потоки, созданные pthread_create() в Linux, всегда были потоками уровня ядра.LinuxThreads не полностью соответствовал POSIX (потоки в одном и том же процессе имели разные pid, обработка сигналов отличалась от той, что требуется POSIX, ...), поэтому для устранения этих проблем был создан NPTL.

Существуют библиотекикоторые реализуют потоки пользовательского уровня (например, GNU pth, p для Portable ), но они не используют API потоков POSIX.

5 голосов
/ 07 мая 2011

До Linux 2.6 они были, по сути, потоками пользовательского пространства, отдельными процессами, которые были склеены вместе, потому что ядро ​​не имело реальной поддержки потоков. Редактировать: До 2.6 существовала ограниченная поддержка потоков уровня ядра (функция clone ()), но она не использовалась с потоками posix, только с альтернативной библиотекой потоков, называемой linuxthreads. С момента появления NPTL (Native Posix Thread Library) потоки ядра.

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