Как реализовать библиотеку потоков? - PullRequest
4 голосов
/ 23 октября 2009

Является ли написание кода для реализации библиотеки потоков частью кода ядра? Является ли реализация функции pthread_create () et al частью ядра?

Ответы [ 2 ]

5 голосов
/ 23 октября 2009

В Linux pthread_create() и др. реализован как часть проекта glibc. Он использует (непереносимый, специфичный для Linux) системный вызов clone(). (Linux fork() также реализован в терминах clone()). Некоторые из BSD также имеют аналогичный системный вызов под названием rfork().

Насколько я понимаю, clone() или rfork() создадут новый процесс, но вы можете указать флаг, который говорит: "используйте семантику копирования при записи, чтобы дать этому другое адресное пространство". Итак, если вы хотите fork(), вы указываете этот флаг, но если вы хотите создать поток, вы этого не делаете, и в итоге вы получаете общее адресное пространство.

(отредактировано для более подробной информации)

3 голосов
/ 23 октября 2009

Потоки иногда реализуются исключительно в пользовательском пространстве (также называемом «зелеными потоками»), но обычно в пространстве ядра. статья в Википедии объясняет это очень хорошо.

...