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